2017-05-04 1 views
0

J'essaie de modéliser un ensemble d'entités pour une application SQL/Java.Modélisation d'une arborescence d'entités ayant chacune des propriétés communes et spécifiques

Je vais devoir gérer différentes entités, comme les voitures, les camions, les drones et les bateaux.

Toutes ces entités sont en fait un équipement. Et un équipement peut dépendre d'un autre, disons une remorque à un camion.

Je ne pourrais avoir qu'une seule entité d'équipement, se référant elle-même en cas de dépendance d'un équipement sur un autre. Mais, si ces équipements ont des propriétés communes, comme parent_id, serial_number, ils auront aussi des propriétés très différentes, et avoir des propriétés si différentes et si différentes dans une entité le gèleront.

Je préférerais avoir les entités spécifiques pour chaque type d'équipement, un pour les bateaux, un pour les camions, etc ...

Je me demande comment modéliser cela en termes de tables SQL.

Un conseil?

+0

Cela dépend de nombreuses variables. Par exemple, à quelle fréquence introduisez-vous un nouveau type d'équipement dans le système? –

+0

@ZoharPeled Disons que je commence avec 3 types d'équipements, chacun avec entre 15 et 20 propriétés spécifiques – Stephane

Répondre

0

Cela a commencé comme un commentaire, mais il tourne à être trop long, donc voilà:

Tout d'abord, afin de bien répondre à cette question, il faut avoir autant de données que possible - une spécification complète de les données qui doivent être stockées sont les meilleures, bien sûr. Encore pire, obtenez un couple de DBA expert, donnez-leur exactement les mêmes données, et vous pourriez vous retrouver avec deux approches très différentes. Cela dit, je vais essayer de répondre à votre question du mieux que je peux.

Il y a un compromis entre la flexibilité de l'anti-pattern EAV et la sécurité de la mise en place d'une table pour chaque type d'équipement. Il existe d'autres façons de concevoir la base de données, comme «héritage» - où vous avez une table de base pour l'équipement, qui contient commun attributs, et une table différente pour chaque type spécifique d'équipement, liée à une relation 1: 1 avec la table d'équipement de base, pour contenir tous les attributs uniques.
C'est la raison pour laquelle j'ai demandé dans les commentaires comment souvent vous introduisez un nouveau type d'équipement au système - parce que si c'est fait dans une fréquence élevée vous pourriez vouloir considérer quelque chose comme EAV, mais si c'est un bas fréquence alors je suggère d'utiliser une table différente pour chaque équipement. En ce qui concerne la question de l'utilisation de la table d'équipement de base ou non - cela dépend d'autres facteurs tels que - Y at-il des attributs qui doivent être liés dans des clés étrangères à tout type d'équipement? Un exemple que je peux penser dans le contexte de cette question est manufacturer, ou même colors - Ce sont les deux attributs qui devraient être communs à tous les types d'équipement que vous avez écrit, mais doivent également être en relation 1: M - Chaque camion est fait par un seul fabricant, mais le même fabricant peut également faire des voitures ou des bateaux, et tout a au moins une couleur de base.

+0

Je vais éviter le modèle EAV. Pour ce qui est d'avoir une table d'équipement de base, vous dites que cela dépend de certains facteurs, en montrant l'un d'entre eux. En considérant seulement ce facteur, est-ce que le besoin d'attributs de clé étrangère communs à tous préconise l'utilisation ou l'évitement d'une table de base? – Stephane

+1

Pas assez pour décider. S'ils sont tous du même côté, alors oui.s'ils sont tous d'un côté, que non. –