Welke beperkingen moet worden gebruikt bij het modelleren van een subtype-supertype-relatie?

Bij het modelleren van een supertype/subtype-relatie met meerdere onderling exclusieve subtypen, hoe moet deze wederzijds exclusiviteit worden afgedwongen door beperkingen?

Mijn eerste gok zou zijn:

SuperType
  (PK) super_id
  (PK) type_id
  Constraint: type_id in (1,2)

SubType1
  (FK) super_id
  (FK) type_id
  Constraint: type_id = 1


SubType2
  (FK) super_id
  (FK) type_id
  Constraint: type_id = 2
2
Ik ben het met ypercube eens. Je hebt het juiste idee. Dit is het maximale wat je kunt doen met beperkingen. Zoals Branko opmerkt, houdt dit geen rekening met weduwe supertypen, maar beperkingen (zelfs reciproke FK's) zullen geen goed antwoord zijn voor dat deel van het probleem vanwege de complexiteit die ze kunnen veroorzaken. Gebruik gewoon een beetje toepassingslogica om het probleem van de weduwe met supertype aan te pakken.
toegevoegd de auteur Joel Brown, de bron
Ja, dat is de manier om dit te doen. U kunt ook SuperType (type_id) gebruiken als FK-naar een Types referentietabel (met slechts 2 rijen).
toegevoegd de auteur ypercubeᵀᴹ, de bron
Een ander soortgelijk probleem: Databaseontwerpprobleem
toegevoegd de auteur ypercubeᵀᴹ, de bron

1 antwoord

Wat u beschrijft, dwingt nog steeds de aanwezigheid van de onderliggende rij af.

Daarvoor zou je de typediscriminator moeten dumpen en een FK in tegengestelde richting moeten toevoegen, wat cirkelvormige FK's zou veroorzaken, waarvoor gedwongen uitgestelde beperkingen zouden moeten worden opgelost - zoiets als dit .

Ik denk persoonlijk dat het beter is om gewoon het meest eenvoudige databasemodel te gebruiken dat mogelijk is ...

SuperType
  (PK) super_id

SubType1
  (PK, FK) super_id

SubType1
  (PK, FK) super_id

... en exclusiviteit en aanwezigheid van kinderen afdwingen op applicatieniveau.

0
toegevoegd