Bonsoir ttalbima,
L’entité-type DONNEE est dotée du seul attribut idDonnee, qui est un auto increment (identity si SQL Server). La donnée correspondante est artificielle et vous n’en avez pas la maîtrise : au fil des incidents, des restaurations, réorganisations et autres impedimenta, il peut y a voir du grabuge dans les clés primaires de la table.
Si ça n’est pas déjà fait, il faudrait définir une donnée naturelle (c’est-à-dire dont vous avez la pleine maîtrise, en en fournissant vous-même les valeurs), qui soit une clé alternative pour la table DONNEE, par exemple un code, comme ci-dessous :
CREATE TABLE DONNEE
(
idDonnee INT IDENTITY
, codeDonnee CHAR(4) NOT NULL
, CONSTRAINT DONNEE_PK PRIMARY KEY (idDonnee)
, CONSTRAINT DONNEE_AK UNIQUE (codeDonnee)
) ;
CREATE TABLE SUIVI_FLACONS
(
idDonnee INT NOT NULL
, raisonControle VARCHAR(30) NOT NULL
, etc VARCHAR(30) NOT NULL
, CONSTRAINT SUIVI_FLACONS_PK PRIMARY KEY (idDonnee)
, CONSTRAINT SUIVI_FLACONS_DONNEE_FK FOREIGN KEY (idDonnee)
REFERENCES DONNEE (idDonnee)
) ;
Un bout de jeu d’essai :
INSERT INTO DONNEE (codeDonnee)
VALUES
('d001'), ('d002'), ('d003')
;
SELECT codeDonnee FROM DONNEE ;
=>
codeDonnee
----------
d001
d002
d003
INSERT INTO SUIVI_FLACONS (idDonnee, raisonControle, etc)
VALUES
((SELECT idDonnee FROM DONNEE WHERE codeDonnee = 'd001'), 'raison x', 'etc. a')
, ((SELECT idDonnee FROM DONNEE WHERE codeDonnee = 'd002'), 'raison y', 'etc. b')
, ((SELECT idDonnee FROM DONNEE WHERE codeDonnee = 'd003'), 'motif m1', 'etc. etc.')
;
SELECT codeDonnee, raisonControle, etc
FROM SUIVI_FLACONS as x
JOIN DONNEE as y ON x.idDonnee = y.idDonnee ;
=>
codeDonnee raisonControle etc
---------- ------------------------------ --------------
d001 raison x etc. a
d002 raison y etc. b
d003 motif m1 etc. etc.
Observez qu’on n’a absolument pas utilisé les valeurs de l’attribut idDonnee, mais plutôt celles de l’attribut codeDonnee.
Partager