Qu'est-ce qu'un arc exclusif dans la base de données et pourquoi est-il mauvais?

10

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 l'arc exclusif:

Un arc exclusif est une erreur courante lorsqu'une table est créée avec deux ou plusieurs clés étrangères où une et une seule d'entre elles peuvent être non nulles. Grosse erreur. D'une part, il devient beaucoup plus difficile de maintenir l'intégrité des données. Après tout, même avec l'intégrité référentielle, rien n'empêche la définition de deux ou plusieurs de ces clés étrangères (malgré les contraintes de vérification complexes).

Je ne comprends vraiment pas pourquoi l'arc exclusif est mauvais. Je n'en ai probablement pas compris les bases. Y a-t-il une bonne explication sur les arcs exclusifs?

Ali Arda Orhan
la source

Réponses:

8

Pour autant que je l'ai compris il y a longtemps, dans un arc exclusif, une table contient un certain nombre de colonnes qui sont des clés étrangères à d'autres tables, mais une seule d'entre elles peut être définie à la fois (en raison d'une contrainte logique sur le domaine du monde réel). Cette règle ne pouvant pas être appliquée à la base de données, un enregistrement corrompu peut être créé lorsque plusieurs de ces clés étrangères ont une valeur.

Je vais faire un exemple. Prenons une application dans laquelle une entreprise garde une trace des camions qu'elle utilise pour livrer des marchandises. Un camion ne peut se trouver que dans un des trois endroits à la fois: il peut être avec un employé, il peut être dans un parking ou il peut être dans un atelier d'entretien. Cela pourrait être modélisé en ayant une Truck-table avec employeeId, parkingGarageId et maintenanceShopId, référençant les tables Employee, ParkingGarage et MaintenanceShop. Il n'y a aucun moyen d'appliquer la règle selon laquelle un seul de ces champs est rempli au niveau de la base de données. Un code incorrect ou une personne ayant un accès direct à la base de données peut insérer un enregistrement contenant deux ou trois champs remplis, ce qui équivaut à une corruption des données dans la base de données.

JDT
la source
4
Les trois emplacements de camions possibles sont des sous-classes d'une superclasse, "emplacement des camions". Il existe de nombreux cas où les sous-classes s'excluent mutuellement. Le défi consiste à savoir comment modéliser des classes et des sous-classes dans des tables relationnelles.
Walter Mitty
Je suis d'accord qu'il existe des cas où l'utilisation de cette conception est justifiée. Cependant, je peux également être d'accord avec le message d'origine selon lequel ce modèle est beaucoup plus utilisé qu'il ne devrait. Il a aussi de très gros inconvénients ...
JDT
6
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 n'aime pas les arcs exclusifs mais ils peuvent être appliqués avec une contrainte de vérification. Bien entendu, la contrainte FK doit également être présente.
Tulains Córdova
1
D'où les «contraintes de vérification complexes malgré» de l'article cité ci-dessus. Vous pourriez être en mesure de faire une validation vraiment sophistiquée avec des contraintes de vérification ou diable, même des déclencheurs, ce qui n'en fait pas une bonne idée ou un gage de bonne conception. Imaginez faire des contraintes de vérification sur des arcs exclusifs à quatre ou cinq colonnes ... De plus, je suis assez sûr que tous les moteurs de base de données ne prennent pas en charge la contrainte CHECK . MySQL indique explicitement dans les documents que les clauses CHECK sont analysées, mais ignorées ...
JDT
Cette source recommande un arc exclusif. Pensées?
Alex Moore-Niemi
4

Il n'y a rien de mal dans les arcs exclusifs. Appliquez simplement la règle métier correspondante à l'aide d'une contrainte de vérification. La plupart des principaux systèmes de gestion de base 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.

Gary B
la source
-1

L'arc exclusif est très utile dans la conception conceptuelle ou logique. Cela ne signifie pas que vous devez mettre en œuvre de cette façon. Dans l'exemple précédent, le concepteur peut décider d'implémenter la conception avec trois tables. Un pour l'emplacement de stationnement, un pour l'employé et un pour l'atelier d'entretien.

Trevor Cummings
la source