A maneira de gerenciar isso é que seus subtipos devem ser determinados pelo super-tipo (ou seja, a PK do sub-tipo também é uma FK do sub-tipo ao super-tipo.)
O desafio é entender se algo é verdadeiramente mutuamente exclusivo ou não. Os atributos dos subtipos devem aplicar-se apenas a esses subtipos, mas pode ser que alguns subtipos sejam mutuamente exclusivos e outros não.
Se você tiver alguns subtipos mutuamente exclusivos, poderá usar um atributo de particionamento no supertipo para indicar qual dos (dois ou mais) subtipos mutuamente exclusivos se aplica. Esse atributo de particionamento pode ser usado com restrições ou gatilhos para impor a exclusividade mútua.
Se você tiver subtipos que não são mutuamente exclusivos, eles poderão existir sem usar nenhum atributo de particionamento.
Considere este modelo de dados:
Você tem três supertipos, mas os tipos FREE_SOFTWARE
e NON-FREE_SOFTWARE
são mutuamente exclusivos, com base no SOFTWARE.free_not_free
atributo de particionamento de sinalizador. Qualquer parte do software também é potencialmente uma OPERATING_SYSTEM
, independentemente de ser ou não gratuita.