Relatie Een op veel of een

Status
Niet open voor verdere reacties.

Europeanmind

Gebruiker
Lid geworden
9 dec 2010
Berichten
58
348j0ao.png


Het komt erop neer dat je een laptop , pc of mini laptop toevoegt die te herkennen is aan het SPC Nummer, moeten het een op een of veel worden ?
 
Je hebt 3 (bijna) identieke tabellen, die min of meer dezelfde voorwerpen (computers) opslaan. Dat is een erg onhandige constructie; maak daar op zijn minst één tabel van. Dan gaat de rest ook een stuk makkelijker.
 
Ik het inderdaad ook eerst 1 tabel , maar ik raakte weer in verwarring :/
Iets zoals dit nu :

15rfhbr.png
 
De reden dat je nu een één-op-één relatie hebt is simpel: beide gekoppelde velden zijn een sleutelveld. En dan heb je automatisch een één-op-één relatie. Ik zou zeggen: zet die twee ontbrekende velden uit SPC nummer dan ook maar in Computers, dat scheelt weer een tabel... Tenzij het een dermate specifieke tabel is, die alleen voor een paar modellen/objecten nodig is dat je daar beter een eigen tabel voor kunt gebruiken.
 
Extra tabellen kunnen altijd; daarbij ga je er dan neem ik aan van uit dat één computer in één lokaal staat, en dat één lokaal meerdere pc's kan bevatten? Dan krijg je dus een één-op-veel relatie tussen Computers en Lokalen.
 
Dat begrijp ik ja alleen krijg ik een een op een relatie . Als ik SPC Nummer sleutel maakt en het dan doe krijg ik wel een een op veel tussen de twee
5p2975.png
 
Volgens mij snap je het principe nog niet helemaal, dus een korte uitleg is op zijn plaats :)
In je tabel Lokalen (Dat zou overigens niet de tabel van het plaatje moeten zijn, maar een andere tabel) is LokaalID een sleutelveld, omdat elk lokaal maar één keer bestaat, en je er dus maar één record voor hebt. In de tabel computers heb je van elke fysieke computer maar één exemplaar, dus SPC_Nummer is een sleutelveld. In de tabel Lokaal leg je de lokaalgegevens vast: welke etage, hoeveel zitplaatsen, Kamernummer etc. Het LokaalID is dan het sleutelveld, want zoals gezegd: elk lokaal bestaat maar één keer.

Je hebt dus een tabel met een aantal unieke computers, en een tabel met een aantal unieke lokalen. Je hebt al eerder gezegd dat elke computer in elk lokaal kan komen te staan, maar dat één computer maar in één lokaal tegelijk kan zijn, dus dat is een veel-op-veel relatie. Die kan je nu nog niet maken, want daar heb je een aparte tabel voor nodig: Lokaal_Computers bijvoorbeeld. Hierin leg je alle combinaties vast die er gemaakt kunnen worden. Om de juiste relaties te leggen heb je dus die drie tabellen nodig, en die koppel je dan als volgt:

[Computers] < --> [Lokaal_Computers] - ComputerID --> ComputerID
[Lokaal] < --> [Lokaal_Computers] - LokaalID --> LokaalID

Als je het goed doet, zijn dat twee één-op-veel relaties, omdat je twee sleutelvelden koppelt aan twee niet-sleutelvelden.
 
Kun je geen records invoeren? En als dat niet lukt, wat is dan de foutmelding?
 
Jawel, ik heb bv het formulier Computers Toevoegen gebaseerd op de tabel Computers.
Hierin werkt alles met het toevoegen ervan, de locatie ook. Ik doe dit met een invoervak met keuzelijst wat handig is. Alleen alle data word opgeslagen in de Tabel Computers .

Dus de andere 2 tabellen worden niet gevuld, misschien is dat ook niet noodzakelijk ?, maar dat wou ik even weten.
 
Ik kan op het werk geen 2007 openen, dus ik kan niet in de db kijken, maar volgens mij ben je niet helemaal juist bezig, als ik dit lees:
Hierin werkt alles met het toevoegen ervan, de locatie ook
Computers toevoegen doe je inderdaad op het formulier Computers, maar daar zit, als het goed is, geen veld Locatie in. Al zou dat overigens wel kunnen, want je kunt in beginsel de tabel Locaties wel aan de tabel Computers hangen. Dat hoeft niet noodzakelijk via een koppeltabel. Omdat een pc tenslotte fysiek maar op één plek tegelijk kan zijn. Alleen heb je dan geen historie van de pc tot je beschikking, want zodra je in de tabel Computers een andere locatie toewijst aan een pc, ben je de vorige plek kwijt. Heb je die informatie niet nodig, dan kan het dus met twee tabellen.
Voor het vullen van de tabel Locaties heb je (neem ik toch aan) een eigen formulier gemaakt; het invullen van locaties heeft namelijk niks te maken met het invullen van computers. Wel kun je , als je een keuzelijst hebt gemaakt voor locaties, vanuit die keuzelijst nieuwe locaties toevoegen als er een lokatie ontbreekt bijvoorbeeld.

Om nog even op je plaatje terug te komen van gisteren 20:29 Daarin probeer je een koppeling te leggen tussen [SCP nummer] en [Lokaal]. Dat kan natuurlijk niet, een lokaal nummer is nooit gelijk aan een pc nummer. In de tabel Computers heb je wel een veld [Lokaal] staan, en dat is dus het veld dat je moet koppelen. Nogmaals: dan bewaar je dus geen historie van je computers (waar hebben ze wanneer gestaan) maar die keuze is aan jou :) Wil je met drie tabellen werken, dan moet je dus een extra formulier maken, en dat als subformulier koppelen aan Computers, Lokalen of beiden. Je ziet dan per computer in het doorlopende formulier waar de computer gestaan heeft, en bij Lokalen zie je dan welke pc's er staan.
 
Als je in computers het veld lokaal laat staan is de 2e tabel volstrekt onnodig aangezien de gegevens dan allemaal ook al in de computer tabel staan (SCP nummer en lokaal).

Verstandig is om het zoals Octafish eigenlijk al aangeeft met 3 tabellen te doen waarbij je 1 tabel gebruikt voor de computer gegevens (sleutel SCP nummer), 1 tabel voor de lokaal gegevens(sleutel lokaal nummer) (afgezien van nummer kun je natuurlijk ook nog zaken als: In welk gebouw, hoeveel pc's kunnen er staan, bij wie is het lokaal te reserveren en alle andere leuke info die bij een lokaal horen) en 1 (koppel)tabel waarin je de koppeling legt tussen lokaal en PC (sleutel Lokaal en SCP nummer samen). waarin je bijvoorbeeld ook naarzet wanneer de pc er geplaatst is (wat handig kan zijn als pc's veel verhuist worden en je moet achterhalen waar een pc voor het laatst was)

De koppeling wijst zich dan vanzelf
 
Het is inderdaad technisch niet nodig om het lokaal twee keer te koppelen aan een computer, al kan het uit gebruiksoogpunt handig zijn om in de Computers te kunnen zien waar de pc nu staat. Met een simpel trucje is dat wel te doen. In bijgaand voorbeeld kun je zien hoe. Kijk naar het formulier [fComputers Overzicht] en voeg maar een nieuw lokaal toe.
 

Bijlagen

Dat is inderdaad mooi, zoiets had ik ook in gedachten en zoiets kon ik ook wel maken, alleen de relaties zit ik altijd mee te *****n.

Ik denk dat ik het zo blijf houden en hetzelfde ga doen voor de voorraad
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan