Maison >base de données >tutoriel mysql >Comment établir et appliquer efficacement des relations individuelles dans la conception de bases de données avec héritage ?
Le défi : Les structures de bases de données complexes nécessitent souvent des relations un-à-un. Un scénario impliquant une table centrale Storage
liée à la fois aux tables Van
et Warehouse
illustre ce défi. Comment pouvons-nous établir et maintenir efficacement ces relations, en garantissant l’intégrité des données ?
Stratégies d'héritage dans la conception de bases de données :
Plusieurs approches existent pour représenter l'héritage dans les bases de données :
Solution optimale : héritage des tables de classes et application au niveau des applications
Pour les scénarios Storage
, Van
et Warehouse
, la méthode « Class Table Inheritance » est préférée. Cependant, l'application à la fois de la présence et de l'exclusivité des relations entre entités enfants nécessite des vérifications au niveau de l'application :
Storage
enregistrement pour chaque Van
ou Warehouse
enregistrement.Storage
enregistrement est lié à un seul Van
OU à un Warehouse
enregistrement, jamais aux deux.Bien que les contraintes de clé étrangère puissent aider, l'obtention d'une exclusivité complète peut nécessiter des procédures stockées et une logique au niveau de l'application pour empêcher les mises à jour directes, potentiellement conflictuelles, des tables par les clients. L'absence de contraintes différées dans Microsoft SQL Server complique les solutions purement basées sur des contraintes.
Alternative : imposer l'exclusivité sans contraintes différées
Une méthode alternative évite les contraintes différées en ajoutant une colonne STORAGE_TYPE
:
STORAGE_TYPE
calculée définie sur 0.STORAGE_TYPE
calculée définie sur 1.Des contraintes uniques sont ensuite appliquées à la combinaison (STORAGE_ID
, STORAGE_TYPE
) :
<code class="language-sql">CREATE TABLE VAN ( STORAGE_ID int PRIMARY KEY, STORAGE_TYPE AS CAST(0 as tinyint) PERSISTED, FOREIGN KEY (STORAGE_ID, STORAGE_TYPE) REFERENCES STORAGE(STORAGE_ID, STORAGE_TYPE) ); CREATE TABLE WAREHOUSE ( STORAGE_ID int PRIMARY KEY, STORAGE_TYPE AS CAST(1 as tinyint) PERSISTED, FOREIGN KEY (STORAGE_ID, STORAGE_TYPE) REFERENCES STORAGE(STORAGE_ID, STORAGE_TYPE) );</code>
Cette approche garantit qu'un seul STORAGE_ID
ne peut être associé qu'à un Van
ou un Warehouse
, renforçant ainsi l'exclusivité de la relation un-à-un. Cependant, la présence nécessite toujours une vérification au niveau de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!