Subtypering¶
Deelverzamelingen (of subsets/subtypes) is een concept die van wiskunde komt. De volgende formule legt het kort uit: als A een deelverzameling van B is, dan zeggen we ook wel: A is bevat in B.
Hopelijk roept dit een beetje (voor)kennis van OOP en je herinnert je het volgende voorbeeld:
classDiagram
class Voertuig {
+eigenschappen
methoden()
}
class Auto {
+eigenschappen
methoden()
}
class Fiets {
+eigenschappen
methoden()
}
Voertuig <|-- Auto : is een soort van
Voertuig <|-- Fiets : is een soort van
Auto’s en vliegtuigen zijn dus subtypes van een voertuig oftewel: hier hebben wij dus een verzameling van voertuigen. Een deelverzameling daarvan zijn auto’s en vliegtuigen.
Hetzelfde principes en concepten kunnen we ook in databases hanteren. Zeker op het moment dat we onze fysieke database EERD beginnen te bouwen.
Er zijn 4 patronen die wij kunnen toepassen. Welke je eigenlijk gaat gebruiken hangt van je situatie af, denk dus goed na over de gevolgen.
- Subtypering
- Generate all, inherit identifier
- Generate parent
- Generate Children
- Generate all, Inherit all
- Meer informatie
Generate all, inherit identifier¶
Generate all
betekent hier dat je alle entiteiten die je in je ERD hebt bedacht, in je tabellen gaat omzetten.
Inherit identifier
betekent dat de primary key wordt meegenomen naar de andere tabellen via de relaties.
Voordeel: er geen duplicatie is en dat attributen gescheiden zijn per klasse. Het is goed uitbreidbaar.
Nadeel: Er zijn mogelijk veel JOINs nodig om zijn alle informatie van een entiteit te achterhalen.
Een ERD de resulterende EER waarin alle entiteiten worden omgezet naar tabellen. |
Generate parent¶
Dit patroon gebruikt maar één tabel waarin alle attributen voor de gehele hiërarchie staan. Bepaalde velden staan dan optioneel (ze mogen NULL velden zijn).
Een ERD en de resulterende EER waarin alle attributen voor de geheler hierarchie in één tabel staan |
Voordeel:: het heel eenvoudig is. Queries worden een stuk eenvoudiger.
Nadeel: Redundante kolommen in de tabel, verspilde opslag ruimte, verlies van NOT NULL integriteit en verlies van overzicht.
Generate Children¶
Deze patroon wordt niet zo vaak gebruikt, maar als je wel twee entiteiten die “mutually exclusive” zijn hebt, dan kan deze patroon handig komen. Je maakt dan een aparte tabel per child-klasse met alle relevante attributen.
Voordeel: alle eigenschappen staan in één tabel, dus het is eenvoudig.
Nadelen: - duplicatie van kolommen - Je hebt een UNION nodig om alle instanties te vinden (traag en complex).
Generate all, Inherit all¶
Dit patroon wordt ook niet zo vaak gebruikt. Wat we hier doen is alles genereren en kopiëren. Je krijgt dus aparte tabellen per (sub)klasse met alle relevante attributen.
Voordeel: alle eigenschappen in meerdere tabellen staan.
Nadelen: - duplicatie van kolommen - Je hebt een UNION nodig om alle instanties te vinden (traag en complex).