Bonjour,
Je viens vers vous avec une question qui est certainement redondante.
Comment modéliser une clé étrangère qui pointe sur une table qui est elle-même liée à la table courante ?
Par exemple, si on prend les fichiers de l'INSEE concernant les communes et les départements.
Dans la table des communes, on retrouve une clé étrangère vers le département dans lequel se situe la commune.
Mais en revanche, le département possède un lien vers le chef lieu, qui est lui-même une commune.
Donc on aurait :
Outre le fait qu'on ne peut pas exécuter le script tel quel, une fois les clés étrangères correctement positionnées, il est impossible d'insérer la moindre ligne dans les tables : si on crée un département, on doit renseigner un chef lieu, qui n'existe pas encore, et si on veut créer une commune, on doit renseigner un département qui n'existe pas encore.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 =sql create table departement ( id int not null primary key, nom varchar(50) not null, chef_lieu int not null references commune(id) ); create table commune ( id int not null primary key, nom varchar(50) not null, departement int not null references departement(id) );
Existe-t-il dont un moyen ?
- soit de dénormaliser (ou renormaliser) la chose, pour avoir des contraintes classiques
- soit une astuce technique (sous SQL Server dans mon cas) qui permette de vivre avec un tel modèle des données, sans devoir désactiver les clés étrangères à chaque manipulation des données
Le tout, évidement, tout en conservant l'intérêt d'un SGBD-R, à savoir :
- qu'on ne puisse pas créer une commune qui ne soit pas dans un département
- qu'on ne puisse pas créer un département qui n'ait pas de chef-lieu
Partager