La forma de gestionar esto es que sus subtipos deben estar determinados por el supertipo (es decir, la PK del subtipo también es un FK del subtipo al supertipo).
El desafío es comprender si algo es verdaderamente mutuamente excluyente o no. Los atributos de los subtipos deberían aplicarse solo a esos subtipos, pero puede ser que algunos subtipos sean mutuamente excluyentes y otros no.
Si tiene algunos subtipos mutuamente excluyentes, puede usar un atributo de partición en el supertipo para indicar cuál de los (dos o más) subtipos mutuamente excluyentes se aplica. Este atributo de partición se puede usar con restricciones o disparadores para imponer la exclusividad mutua.
Si tiene subtipos que no son mutuamente excluyentes, pueden existir sin utilizar ningún atributo de partición.
Considere este modelo de datos:
Tiene tres supertipos, pero los tipos FREE_SOFTWARE
y NON-FREE_SOFTWARE
son mutuamente excluyentes, según el SOFTWARE.free_not_free
atributo de partición de marca. Cualquier pieza de software también es potencialmente una OPERATING_SYSTEM
, independientemente de si es gratuita o no.