Powiedzmy, że mam podmiot o nazwie Oprogramowanie i dwa podtypy FreeSoftware i NonFreeSoftware. Jednostka NonFreeSoftware ma atrybuty takie jak data zakupu, dostawca itp. Jednostka FreeSoftware ma atrybuty takie jak licencja, adres URL kodu źródłowego itp.
Więc jeśli chcę modelować inny byt, OperatingSystem, jak mam to zrobić? Istnieje „związek” z oprogramowaniem, ale „albo / lub” związek z FreeSoftware i NonFreeSoftware.
Myślę, że coś pomijam w sposobie, w jaki analizuję tę hierarchię.
Odpowiedzi:
Sposób zarządzania tym polega na tym, że twoje podtypy muszą być określone przez nadtyp (tj. PK podtypu jest również FK od podtypu do nadtypu).
Wyzwanie polega na zrozumieniu, czy coś naprawdę wyklucza się wzajemnie, czy nie. Atrybuty podtypów powinny mieć zastosowanie tylko do tych podtypów, ale może się zdarzyć, że niektóre podtypy wzajemnie się wykluczają, a inne nie.
Jeśli masz niektóre wzajemnie wykluczające się podtypy, możesz użyć atrybutu partycjonowania na supertypie, aby wskazać, który z dwóch (lub więcej) wzajemnie wykluczających się podtypów ma zastosowanie. Tego atrybutu partycjonowania można używać z ograniczeniami lub wyzwalaczami w celu wymuszenia wzajemnej wyłączności.
Jeśli masz podtypy, które nie wykluczają się wzajemnie, mogą istnieć bez użycia atrybutu partycjonowania.
Rozważ ten model danych:
Masz trzy supertypy, ale typy
FREE_SOFTWARE
iNON-FREE_SOFTWARE
wzajemnie się wykluczają, na podstawieSOFTWARE.free_not_free
atrybutu podziału flagi. Każde oprogramowanie jest również potencjalnieOPERATING_SYSTEM
, niezależnie od tego, czy jest bezpłatne.źródło
Dlaczego OperatingSystem miałby być zupełnie nowym bytem? Powinien należeć do Oprogramowania, ponieważ tak właśnie jest. A system operacyjny (jeśli zamknięty kod źródłowy) miałby datę zakupu, dostawcę itp. A system operacyjny open source miałby licencję, adres URL kodu źródłowego itp.
Poleciłbym związek z
SoftwareType
czymś podobnym. To wtedy możesz / powinieneś określić, czy Oprogramowanie jest systemem operacyjnym, aplikacją lub jakimkolwiek innym obsługiwanym oprogramowaniem.źródło