Disons que j'ai une entité nommée Software et deux sous-types FreeSoftware et NonFreeSoftware. L'entité NonFreeSoftware a des attributs tels que la date d'achat, le fournisseur, etc. L'entité FreeSoftware a des attributs tels que la licence, l'URL du code source, etc.
Donc, si je veux modéliser une autre entité, OperatingSystem, comment dois-je le faire? Il existe une relation "existe" avec le logiciel, mais une relation "soit / ou" avec FreeSoftware et NonFreeSoftware.
Je pense que je manque quelque chose dans la façon dont j'analyse cette hiérarchie.
Réponses:
La façon de gérer cela est que vos sous-types doivent être déterminés par le super-type (c'est-à-dire que le PK du sous-type est également un FK du sous-type au super-type.)
Le défi consiste à comprendre si quelque chose est vraiment mutuellement exclusif ou non. Les attributs des sous-types ne devraient s'appliquer qu'à ces sous-types, mais il se pourrait bien que certains sous-types s'excluent mutuellement et d'autres non.
Si vous avez des sous-types mutuellement exclusifs, vous pouvez utiliser un attribut de partitionnement sur le super-type pour indiquer lequel des (deux ou plusieurs) sous-types mutuellement exclusifs s'applique. Cet attribut de partitionnement peut être utilisé avec des contraintes ou des déclencheurs pour appliquer l'exclusivité mutuelle.
Si vous avez des sous-types qui ne s'excluent pas mutuellement, ils peuvent exister sans utiliser d'attribut de partitionnement.
Considérez ce modèle de données:
Vous avez trois super-types, mais les types
FREE_SOFTWARE
etNON-FREE_SOFTWARE
sont mutuellement exclusifs, en fonction de l'SOFTWARE.free_not_free
attribut de partitionnement d'indicateur. Tout logiciel donné est également potentiellement unOPERATING_SYSTEM
, qu'il soit gratuit ou non.la source
Pourquoi OperatingSystem serait-il une entité complètement nouvelle? Il devrait relever du logiciel, car c'est ce que c'est. Et un système d'exploitation (s'il est de source fermée) aurait une date d'achat, un fournisseur, etc. Et un système d'exploitation open-source aurait une licence, une URL de code source, etc.
Je recommanderais une relation à un
SoftwareType
ou quelque chose du genre. C'est à ce moment-là que vous pourriez / devriez spécifier si le logiciel est un système d'exploitation, une application ou tout autre type de logiciel que vous prenez en charge.la source