Quest-ce que larc exclusif dans la base de données et pourquoi est-il ' mal?

Je lisais les erreurs de conception de base de données les plus courantes commises par le développeur Q & A sur stackoverflow. À la première réponse, il y avait une phrase sur larc exclusif:

Un arc exclusif est une erreur courante où une table est créée avec deux ou plusieurs clés étrangères où un et un seul dentre eux peut être non nul. Grosse erreur. Dune part, il devient dautant plus difficile de maintenir lintégrité des données. Après tout, même avec lintégrité référentielle, rien nempêche la définition de deux ou plusieurs de ces clés étrangères (malgré les contraintes de vérification complexes).

Je ne «Je ne comprends pas pourquoi larc exclusif est mauvais. Je nai probablement pas compris les bases de celui-ci. Y a-t-il une bonne explication sur les arcs exclusifs?

Réponse

Pour autant que je lai compris il y a longtemps, dans une exclusivité arc une table contient un certain nombre de colonnes qui sont des clés étrangères vers dautres tables, mais une seule dentre elles peut être définie à la fois (en raison dune contrainte logique sur le domaine provenant du monde réel). Comme cette règle ne peut pas être appliquée à la base de données, un enregistrement corrompu pourrait être créé où plusieurs de ces clés étrangères ont une valeur.

Je vais faire un exemple. Prenons une application dans laquelle une entreprise effectue le suivi de les camions quil utilise pour livrer les marchandises. Un camion ne peut se trouver que dans lun des trois endroits à la fois: il peut être avec un employé, il peut être dans un parking ou il peut être dans un atelier dentretien. Cela pourrait être modélisé en ayant une table Truck avec employeeId, parkingGarageId et maintenanceShopId, référençant les tables Employee, ParkingGarage et MaintenanceShop. une personne ayant un accès direct à la base de données pourrait insérer un enregistrement comportant deux ou trois champs remplis, ce qui équivaut à une corruption des données dans la base de données.

Commentaires

  • Les trois emplacements de camions possibles sont des sous-classes dune superclasse, " emplacement du camion ". Il existe de nombreux cas où les sous-classes sexcluent mutuellement. Le défi est de savoir comment modéliser des classes et des sous-classes dans des tables relationnelles.
  • Je suis daccord quil existe des cas où lutilisation de cette conception est justifiée. Cependant, je peux également être daccord avec le message original selon lequel ce modèle est beaucoup plus utilisé quil ne le devrait. Elle présente également de très gros inconvénients …
  • Une contrainte de vérification ne peut-elle pas être utilisée? Par exemple alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null)). Je ne ' t comme les arcs exclusifs mais ils peuvent être appliqués avec une contrainte de vérification. Bien sûr, la contrainte FK doit également être présente.
  • Doù les " contraintes de contrôle complexes nonobstant " du post cité ci-dessus. Vous pourrez peut-être faire une validation très sophistiquée avec des contraintes de vérification ou diable, même des déclencheurs, qui ne ' t en font pas une bonne idée ou un gage de bonne conception. Imaginez faire des contraintes de contrôle sur des arcs exclusifs avec quatre ou cinq colonnes … De plus, je ' suis assez sûr que pas tous les moteurs de base de données prend en charge la contrainte CHECK . MySQL indique explicitement dans la documentation que les clauses CHECK sont analysées, mais ignorées …
  • Cette source recommande arc exclusif. Pensées?

Réponse

Il ny a rien de mal dans les arcs exclusifs. Appliquez simplement la règle métier correspondante à laide dune contrainte de vérification. La plupart des principaux systèmes de gestion de bases de données prennent en charge les contraintes de vérification (Oracle, SQL Server, PostgreSQL). Si vous « utilisez un outil de modélisation de données, il y a de fortes chances que votre outil génère automatiquement le code pour implémenter la contrainte de vérification.

Réponse

Larc exclusif est très utile dans la conception conceptuelle ou logique. Cela ne signifie pas que vous devez limplémenter de cette façon. Dans lexemple précédent, le concepteur peut décider dimplémenter la conception avec trois tables. Une pour le stationnement emplacement, un pour lemployé et un pour latelier de maintenance.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *