niet alle gegevens zijn zichtbaar in query

Status
Niet open voor verdere reacties.

Leidar

Nieuwe gebruiker
Lid geworden
16 jan 2017
Berichten
4
Ik ben bezig een nieuwe database op te stellen maar loop tegen een paar problemen aan. ik heb verschillende tabellen die allemaal gelinkt zijn aan de tabel patient. Ook heb ik een formulier gemaakt waarbij de gegevens ingevuld kunnen worden onder ander aan de hand van pulldown menus waarbij de waarden komen uit de andere tabellen. Om het uiteindelijk leesbaar te maken heb ik een query gemaakt waarin ik probeer om alle gegevens bij elkaar te krijgen en ook de tekst te zien ipv alleen de bijbehorende nummers.
bijvoorbeeld in de tabel geslacht zijn er de opties man, vrouw, m/v en juveniel. Tevens heb ik een volgende kolom in deze rij staan met de opties volwassen en juveniel.
Met behulp van de query pat_geslacht wil ik zichtbaar maken of de patienten man, vrouw, m/v of juveniel zijn, en de bijbehorende volwassen of Juveniel
Wat ik wel te zien krijg is de het nummer dat hoort bij het geslacht, maar niet de tekst

mijn vragen (om te beginnen) 1) kan ik in tabel geslacht de link tussen man, vrouw, m/v of juveniel laten staan naast de kolom volwassen of juveniel of zou ik deze moeten splitsen in 2 tabelen
2) waarom krijg ik in de query pat_geslacht de nummers te zien maar blijven de velden leeg? komt dit door het join type (ik heb geprobeerd om er een 1 op veel van te maken maar dat lukt niet)?

hopelijk kunnen jullie me op weg helpen zodat ik weer verder kan puzzelen om een goed werkende database te maken
Leida
 

Bijlagen

  • oefen 12 jan.zip
    155 KB · Weergaven: 18
Laten we eens beginnen met de opzet van de database (nee, allereerst natuurlijk een welkom bij HelpMij ;) ). Ik mis nogal wat in je relaties, en zie zaken die ik daar liever niet zie. Wat ik mis, en ook nog eens structureel, is de Referentiële integriteit die totaal ontbreekt bij elke koppeling. En dat maakt alle koppelingen op slag volslagen waardeloos. Je hebt bijvoorbeeld het veld [Geslacht] uit de tabel [Geslacht] (bij voorkeur nooit doen: identieke namen gebruiken. Het gaat meestal goed, maar wat is het nu onderscheid tussen het veld [Geslacht] en de tabel [Geslacht]? Ik zou de tabel altijd [tGeslacht] of [tblGeslacht] hebben genoemd.) gekoppeld aan het veld [M/V/J] in de tabel [Patienten] (nooit doen, gereserveerde tekens zoals \ en / in een naam). Maar omdat er geen Referentiële integriteit is, kun je het [Geslacht] net zo goed koppelen aan het veld [Mishandeling slachtoffer] of [Datum uit]. Die doen het namelijk ook.... Volslagen onzinnig natuurlijk maar dat is ook mijn punt. Deze relaties zijn volslagen nutteloos.
Daarnaast heb je iets gedaan dat ik dan weer nooit doe, ook al omdat er doorgaans geen enkele reden voor is: je hebt een aantal relaties een Outer Join gegeven. En hoe lang ik er ook naar kijk: ik zien daar totaal het nut niet van. Relaties zijn doorgaans pas nuttig als ze als Inner Join zijn vastgelegd. Maar het allerbelangrijkste is natuurlijk dat de Referentiële integriteit ontbreekt. Nou kan het zijn dat je voor HelpMij een versie hebt gemaakt en die snel in elkaar hebt geflanst, en dat je eigen db die relaties dus wel correct hebben. Zou kunnen, in dat geval heb ik natuurlijk niks gezegd.

Nog zo'n ding wat niet goed is: je tabellen hebben geen van allen een sleutelveld. Zonder sleutelvelden is het sowieso onmogelijk om goede relaties te maken, dus daar ligt de eerste fout al. Je hebt alle tabellen nog wel een mogelijk sleutelveld gegeven (de ID velden, die je dan eigenlijk een unieke naam zou moeten geven voor het mooie), maar die heb je dus niet gebruikt als sleutel. Sterker nog: je gebruikt ze óók niet om te koppelen met de tabel [Patiënten], en dat zou dus óók hebben gemoeten. Dus: in de tabel [tGeslacht] is het veld [GeslachtID] een sleutelveld, en in de tabel [Patiënten] neem je dan ook het veld [GeslachtID] op zodat je dat kunt koppelen. En niet, wat je nu gedaan hebt, het tekstveld [geslacht]. Daarnaast heb je in de tabel [tGeslacht] van het veld [Volw/Juv] een memoveld gemaakt. Heb je daar een goede reden voor? Is een tekstveld van 255 tekens niet genoeg? Memovelden zijn namelijk een beetje onhandig in databases; niet alleen vanwege de grootte van 64000 tekens, maar vooral omdat je er veel minder mee kunt manipuleren. En bij exports raak je doorgaans ook nog eens de meeste tekst kwijt. Dus je moet daar erg mee uitkijken.

Laatste puntje (en dan hou ik voorlopig op): in de tabel [Patiënten] heb je zowel een veld [Wijk] als een veld [Plaats]. Tenzij ik gek ben, is een wijk een gedeelte van een plaats. Als je dus de plaats weet, weet je ook welke wijken er zijn en omgekeerd: als je de wijk weet, heb je ook de plaats. Door er 2 velden van te maken, kun je de wijk "Oog in Al" kiezen in de plaats "Gouda". En dat is dus onmogelijk, tenzij Gouda nu ook een wijk heeft die zo heet...
Kortom: er is nog wel wat werk aan de winkel, en ik zou eerst de database op orde brengen voordat we überhaupt naar je eigenlijke vraag gaan kijken. Want die heeft alles te maken met het feit dat je de db niet goed hebt opgezet. Althans: dat geldt dus voor de versie die je hier hebt bijgevoegd.
 
oke, alvast bedankt voor je terechtwijzingen :D. Ik zal me er weer op storten en proberen een betere opzet te maken....
mijn eerste fout is dat ik eigenlijk dacht dat ik maar 1 sleutel id kon hebben per database, dus dat zal ik aanpassen. De outerjoins had ik gemaakt omdat ik dacht dat op basis van de beschrijving beter paste omdat ik geen 1 op oneindig kon krijgen
De velden wijk en plaats zijn er omdat er gerapporteerd moet worden op basis van gemeente, maar in het geval van Utrecht op wijk (waarbij wij als input vaak de buurt opgegeven krijgen (laten we zeggen dat er iets van 60 buurten zijn, die vallen onder iets van 6 wijken, in 1 plaats))
Maar terug naar de tekentafel dus (samen met de handleiding/cursus die ik gisteren hier ook heb gevonden)
 
De outerjoins had ik gemaakt omdat ik dacht dat op basis van de beschrijving beter paste omdat ik geen 1 op oneindig kon krijgen
Dat was dus omdat je in je tabel niet koppelde op Sleutelveld + Koppelveld. Dat heeft verder niks met Outer Join te maken. Normaal gesproken gebruik je RI om te voorkomen dat in de gekoppelde tabel data komt te staan die niet bestaat in de hoofdtabel. En dat is iets wat je eigenlijk niet wilt. Een Outer Join kún je wel eens gebruiken, bijvoorbeeld als je een bestelling aan het opnemen bent voor een niet-ingevoerde klant. Dan zeg je niet tegen die klant dat je eerst een klanten record moet maken, maar neem je de order eerst aan, en zorg je later voor de klantgegevens. Op dat moment voer je dus een order op met een niet-bestaande klant, (komt immers later in het gesprek) en dan heb je dus een Outer Join nodig. Anders nooit.

De velden wijk en plaats zijn er omdat er gerapporteerd moet worden op basis van gemeente, maar in het geval van Utrecht op wijk
Dat snap ik wel, gezien de uitgebreide data die je hebt ingevoerd, maar dan nog doe je het verkeerd. Een wijk wil je dan dus kiezen als Utrecht de vindplaats is. En nergens anders bij. Ik zou de tabel Wijken dus gewoon koppelen aan de tabel Plaatsen, en op het formulier later een extra keuzelijst laten zien (verplicht in te vullen) waarin de wijk wordt gekozen. Die optie zie je dus niet bij andere plaatsen. Daarom zei ik ook: wijk is afhankelijk van plaats.
 
Heel erg bedankt
Ondertussen het ik de tabel namen aangepast en overal RI gemaakt (heel erg bedankt, ik wist dat ik het ergens fout deed, maar wist niet waar het zat). Het volgende wat ik nu uit ga puzzelen is hoe ik dan inderdaad wijken kan linken aan plaats zodat inderdaad wijken alleen ingevuld hoeven te worden als Utrecht is ingevuld. Lukt me dat niet dan kom ik terug met vragen. Ben nu al blij met wat ik nu heb :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan