Bonjour,

Envoyé par
le_bono
le seul inconvenient c'est pout l'intégrité référentielle.
Au plan théorique, il n’y a pas de problème d’intégrité référentielle :
1 2 3 4 5 6 7 8 9 10
| CREATE TABLE Commercial
(
C_Id int not null,
C_Nom varchar (48) not null,
C_IdResponsable int null,
PRIMARY KEY (C_Id),
FOREIGN KEY (C_IdResponsable)
REFERENCES Commercial (C_Id)
ON DELETE ...
); |
Mais la cardinalité 0,1 se traduit par NULL pour l’attribut C_IdResponsable.
En plus, selon les SGBD vous pouvez être amené à vous plier à des règles qui se contredisent dans leurs justifications. Par exemple, vous devez coder :
« ON DELETE CASCADE » dans le cas de DB2 for z/OS,
« ON DELETE NO ACTION » dans le cas de SQL Server.
Pour ne pas mélanger ce qui est propre à une personne avec ses rapports hiérarchiques, et par ailleurs pour éviter NULL, vous pouvez de préférence coder :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| CREATE TABLE Commercial
(
C_Id int not null,
C_Nom varchar (48) not null,
PRIMARY KEY (C_Id),
);
CREATE TABLE Hierarchie
(
C_Id int not null,
C_IdResponsable int not null,
PRIMARY KEY (C_Id),
FOREIGN KEY (C_Id)
REFERENCES Commercial (C_Id)
ON DELETE ...,
FOREIGN KEY (C_IdResponsable)
REFERENCES Commercial (C_Id)
ON DELETE ...
); |
Mais les SGBD continuent à se contredire joyeusement.
Partager