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
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.
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.