Ik ben al enige tijd bezig met een web applicatie die gegevens uit een database haalt. Ik zal het met een simpel fictief voorbeeld uitleggen. Het idee is redelijk simpel.
Stel ik heb een tabel Huwelijken en een tabel Personen. Normaal gesproken koppelen we tabellen aan elkaar met een koppeltabel als je een many-to-many relatie hebt. In dit geval echter kunnen slechts twee mensen met elkaar getrouwd zijn. Daarom dacht ik dat het makkelijker is om in de tabel Huwelijken twee velden te maken, namelijk Man en Vrouw. Dit zijn dan foreign keys naar de tabel Personen. Deze schets van de situatie is nogmaals fictief en daarom hou ik even geen rekening met homo's
Dus ik heb nu een tabel Huwelijken met de velden Man en Vrouw die beide een relatie hebben met de Personen tabel. Dit werkt. Een alternatief zou dus zijn geweest een tabel Getrouwden, met daarin een relatie naar de Huwelijken, en naar de Personen.
Er zijn meerdere mogelijkheden om gegevens op te vragen. De ene mogelijkheid om de personen als rijen te selecteren met een OR:
Een mogelijkheid om de personen als kolommen te selecteren:
Afhankelijk van wat je wilt (rijen of kolommen) kan je dus selecteren.
Wat denken jullie hiervan? Is dit de goede opzet of is een koppeltabel toch beter? Hoe zit het met de performance bij goed gebruik van indexen? Wellicht goed te vermelden is dat in de echte situatie een van beide velden ook NULL mag zijn, dus in dit voorbeeld mag een Huwelijk ook bestaan uit enkel een Man of een Vrouw.
Het nadeel wat ik alvast tegenkom is dat je geen update en delete rules kunt maken voor beide relaties. Maar dat is een overkomelijk nadeel. Alvast bedankt voor reacties!
Stel ik heb een tabel Huwelijken en een tabel Personen. Normaal gesproken koppelen we tabellen aan elkaar met een koppeltabel als je een many-to-many relatie hebt. In dit geval echter kunnen slechts twee mensen met elkaar getrouwd zijn. Daarom dacht ik dat het makkelijker is om in de tabel Huwelijken twee velden te maken, namelijk Man en Vrouw. Dit zijn dan foreign keys naar de tabel Personen. Deze schets van de situatie is nogmaals fictief en daarom hou ik even geen rekening met homo's
Dus ik heb nu een tabel Huwelijken met de velden Man en Vrouw die beide een relatie hebben met de Personen tabel. Dit werkt. Een alternatief zou dus zijn geweest een tabel Getrouwden, met daarin een relatie naar de Huwelijken, en naar de Personen.
Er zijn meerdere mogelijkheden om gegevens op te vragen. De ene mogelijkheid om de personen als rijen te selecteren met een OR:
SQL:
1
2
3
4
| SELECT dbo.Huwelijken.Id, dbo.Personen.Naam FROM dbo.Huwelijken INNER JOIN dbo.Personen ON dbo.Huwelijken.[Man Id] = dbo.Personen.Id OR dbo.Huwelijken.[Vrouw Id] = dbo.Personen.Id |
Een mogelijkheid om de personen als kolommen te selecteren:
SQL:
1
2
3
4
| SELECT dbo.Huwelijken.Id, Mannen.Naam AS Man, Vrouwen.Naam AS Vrouw FROM dbo.Huwelijken INNER JOIN dbo.Personen AS Mannen ON dbo.Huwelijken.[Man Id] = Mannen.Id INNER JOIN dbo.Personen AS Vrouwen ON dbo.Huwelijken.[Vrouw Id] = Vrouwen.Id |
Afhankelijk van wat je wilt (rijen of kolommen) kan je dus selecteren.
Wat denken jullie hiervan? Is dit de goede opzet of is een koppeltabel toch beter? Hoe zit het met de performance bij goed gebruik van indexen? Wellicht goed te vermelden is dat in de echte situatie een van beide velden ook NULL mag zijn, dus in dit voorbeeld mag een Huwelijk ook bestaan uit enkel een Man of een Vrouw.
Het nadeel wat ik alvast tegenkom is dat je geen update en delete rules kunt maken voor beide relaties. Maar dat is een overkomelijk nadeel. Alvast bedankt voor reacties!