Способ управлять этим состоит в том, что ваши подтипы должны определяться супертипом (т.е. PK подтипа также является FK от подтипа до супертипа.)
Задача состоит в том, чтобы понять, является ли что-то действительно взаимоисключающим или нет. Атрибуты подтипов должны применяться только к этим подтипам, но вполне может быть, что некоторые подтипы являются взаимоисключающими, а некоторые - нет.
Если у вас есть несколько взаимоисключающих подтипов, то вы можете использовать атрибут разделения в супертипе, чтобы указать, какой из (двух или более) применяются взаимоисключающие подтипы. Этот атрибут разделения может использоваться с ограничениями или триггерами для обеспечения взаимной исключительности.
Если у вас есть подтипы, которые не являются взаимоисключающими, они могут существовать без использования каких-либо атрибутов разделения.
Рассмотрим эту модель данных:
У вас есть три супер-типа, но FREE_SOFTWARE
и NON-FREE_SOFTWARE
типы являются взаимоисключающими, на основе SOFTWARE.free_not_free
атрибута флага разделения. Любая данная часть программного обеспечения также является потенциально доступной OPERATING_SYSTEM
, независимо от того, является ли она бесплатной.