Skip to content

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.

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.

generate_all_inherit_identifier
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).

generate_parent
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.

generate_children

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.

generate_all_inherit_all

Voordeel: alle eigenschappen in meerdere tabellen staan.

Nadelen: - duplicatie van kolommen - Je hebt een UNION nodig om alle instanties te vinden (traag en complex).

Meer informatie