Digamos que tengo una entidad llamada Software y dos subtipos FreeSoftware y NonFreeSoftware. La entidad NonFreeSoftware tiene atributos como fecha de compra, proveedor, etc. La entidad FreeSoftware tiene atributos como licencia, url de código fuente, etc.
Entonces, si quiero modelar otra entidad, OperatingSystem, ¿cómo debo hacerlo? Existe una relación de "es una" con el Software, pero una relación de "uno u otro" con FreeSoftware y NonFreeSoftware.
Creo que me falta algo en la forma en que estoy analizando esta jerarquía.
Respuestas:
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
yNON-FREE_SOFTWARE
son mutuamente excluyentes, según elSOFTWARE.free_not_free
atributo de partición de marca. Cualquier pieza de software también es potencialmente unaOPERATING_SYSTEM
, independientemente de si es gratuita o no.fuente
¿Por qué OperatingSystem sería una entidad completamente nueva? Debería estar dentro del Software, ya que eso es lo que es. Y un sistema operativo (si es de código cerrado) tendría una fecha de compra, proveedor, etc. Y el sistema operativo de código abierto tendría una licencia, URL de código fuente, etc.
Recomendaría una relación con
SoftwareType
algo o algo por el estilo. Ahí es cuando podría / debería especificar si el Software es un SO, una aplicación o cualquier otro tipo de software que admita.fuente