Скажем, у меня есть объект с именем Software и два подтипа FreeSoftware и NonFreeSoftware. Сущность NonFreeSoftware имеет такие атрибуты, как дата покупки, поставщик и т. Д. Сущность FreeSoftware имеет такие атрибуты, как лицензия, URL исходного кода и т. Д.
Так что, если я хочу смоделировать другую сущность, OperatingSystem, как мне это сделать? Существует отношение «есть» к программному обеспечению, но есть отношение «или / или» к FreeSoftware и NonFreeSoftware.
Я думаю, что что-то упущено в том, как я анализирую эту иерархию.
Ответы:
Способ управлять этим состоит в том, что ваши подтипы должны определяться супертипом (т.е. PK подтипа также является FK от подтипа до супертипа.)
Задача состоит в том, чтобы понять, является ли что-то действительно взаимоисключающим или нет. Атрибуты подтипов должны применяться только к этим подтипам, но вполне может быть, что некоторые подтипы являются взаимоисключающими, а некоторые - нет.
Если у вас есть несколько взаимоисключающих подтипов, то вы можете использовать атрибут разделения в супертипе, чтобы указать, какой из (двух или более) применяются взаимоисключающие подтипы. Этот атрибут разделения может использоваться с ограничениями или триггерами для обеспечения взаимной исключительности.
Если у вас есть подтипы, которые не являются взаимоисключающими, они могут существовать без использования каких-либо атрибутов разделения.
Рассмотрим эту модель данных:
У вас есть три супер-типа, но
FREE_SOFTWARE
иNON-FREE_SOFTWARE
типы являются взаимоисключающими, на основеSOFTWARE.free_not_free
атрибута флага разделения. Любая данная часть программного обеспечения также является потенциально доступнойOPERATING_SYSTEM
, независимо от того, является ли она бесплатной.источник
Почему OperatingSystem была бы совершенно новой сущностью? Он должен подпадать под программный, так как он есть. И ОС (если она с закрытым исходным кодом) будет иметь дату покупки, поставщика и т. Д. И ОС с открытым исходным кодом будет иметь лицензию, URL исходного кода и т. Д.
Я бы порекомендовал отношения к
SoftwareType
или что-то в этом роде. Именно тогда вы могли / должны указать, является ли Программное обеспечение операционной системой, или приложением, или любым другим типом программного обеспечения, которое вы поддерживаете.источник