Angenommen, ich habe eine Entität namens Software und zwei Untertypen FreeSoftware und NonFreeSoftware. Die NonFreeSoftware-Entität verfügt über Attribute wie Kaufdatum, Anbieter usw. Die FreeSoftware-Entität verfügt über Attribute wie Lizenz, Quellcode-URL usw.
Wenn ich also eine andere Entität, OperatingSystem, modellieren möchte, wie soll ich das tun? Es gibt eine "ist eine" Beziehung zu Software, aber eine "entweder / oder" Beziehung zu FreeSoftware und NonFreeSoftware.
Ich glaube, ich vermisse etwas in der Art, wie ich diese Hierarchie analysiere.
Antworten:
Um dies zu verwalten, müssen Ihre Untertypen vom Supertyp bestimmt werden (dh die PK des Untertyps ist auch eine FK vom Untertyp zum Supertyp.)
Die Herausforderung besteht darin zu verstehen, ob sich etwas wirklich gegenseitig ausschließt oder nicht. Die Attribute von Untertypen sollten nur für diese Untertypen gelten, aber es kann durchaus sein, dass sich einige Untertypen gegenseitig ausschließen und andere nicht.
Wenn Sie einige sich gegenseitig ausschließende Untertypen haben, können Sie ein Partitionierungsattribut für den Supertyp verwenden, um anzugeben, welcher der (zwei oder mehr) sich gegenseitig ausschließenden Untertypen gilt. Dieses Partitionierungsattribut kann mit Einschränkungen oder Auslösern verwendet werden, um die gegenseitige Ausschließlichkeit zu erzwingen.
Wenn Sie Untertypen haben, die sich nicht gegenseitig ausschließen, können diese ohne Verwendung eines Partitionierungsattributs vorhanden sein.
Betrachten Sie dieses Datenmodell:
Sie haben drei Supertypen, aber die Typen
FREE_SOFTWARE
und schließenNON-FREE_SOFTWARE
sich gegenseitig aus, basierend auf demSOFTWARE.free_not_free
Flag-Partitionierungsattribut. Jede gegebene Software ist möglicherweise auch eineOPERATING_SYSTEM
, unabhängig davon, ob sie kostenlos ist oder nicht.quelle
Warum sollte OperatingSystem eine völlig neue Einheit sein? Es sollte unter die Software fallen, da es so ist. Und ein Betriebssystem (wenn Closed-Source) hätte ein Kaufdatum, einen Anbieter usw. Und ein Open-Source-Betriebssystem hätte eine Lizenz, eine Quellcode-URL usw.
Ich würde eine Beziehung zu einem
SoftwareType
oder etwas in dieser Richtung empfehlen . In diesem Fall können / sollten Sie angeben, ob es sich bei der Software um ein Betriebssystem oder eine Anwendung handelt oder welche anderen Arten von Software Sie unterstützen.quelle