Bonsoir ceststef,
Envoyé par
ceststef
je ne comprends pas pourquoi il n'y a pas autoincrémentation pour CourseId qui est déclaré PK à la création de la table.
Une colonne n’est auto-incrémentée que si on demande à ce qu’elle le soit. Par exemple dans le post #16, on n’a pas demandé l’auto-incrémentation de CourseId.
Maintenant, utilisons l’auto-incrémentation pour les tables suivantes :
CREATE TABLE HIPPODROME
(
HippodromeId INT IDENTITY(1,1)
, HippodromeNom VARCHAR(48) NOT NULL
, CONSTRAINT HIPPODROME_PK PRIMARY KEY (HippodromeId)
) ;
CREATE TABLE TERRAIN
(
TerrainId INT IDENTITY(1,1)
, TerrainEtat VARCHAR(16) NOT NULL
, CONSTRAINT TERRAIN_PK PRIMARY KEY (TerrainId)
) ;
CREATE TABLE PRIX
(
PrixId INT IDENTITY(1,1)
, PrixNom VARCHAR(48) NOT NULL
, CONSTRAINT PRIX_PK PRIMARY KEY (PrixId)
) ;
CREATE TABLE REUNION
(
ReunionId INT IDENTITY(1,1)
, TerrainId INT NOT NULL
, HippodromeId INT NOT NULL
, ReunionNumero INT NOT NULL
, ReunionDate DATE NOT NULL
, CONSTRAINT REUNION_PK PRIMARY KEY (ReunionId)
, CONSTRAINT REUNION_AK UNIQUE (ReunionNumero)
, CONSTRAINT REUNION_TERRAIN_FK FOREIGN KEY (TerrainId)
REFERENCES TERRAIN
, CONSTRAINT REUNION_HIPPODROME_FK FOREIGN KEY (HippodromeId)
REFERENCES HIPPODROME (HippodromeId)
) ;
CREATE TABLE COURSE
(
ReunionId INT NOT NULL
, CourseId INT IDENTITY(1,1)
, PrixId INT NOT NULL
, CourseNumero INT NOT NULL
, CourseDuree TIME NOT NULL
, CourseAllocation INT NOT NULL
, CONSTRAINT COURSE_PK PRIMARY KEY (ReunionId, CourseId)
, CONSTRAINT COURSE_AK UNIQUE (ReunionId, CourseNumero)
, CONSTRAINT COURSE_REUNION_FK FOREIGN KEY (ReunionId)
REFERENCES REUNION
, CONSTRAINT COURSE_PRIX_FK FOREIGN KEY (PrixId)
REFERENCES PRIX (PrixId)
) ;
Je ne connais pas SQLITE, mais en tout cas voici un bout de jeu d’essai qui fonctionne avec SQL Server :
INSERT INTO HIPPODROME (HippodromeNom)
VALUES ('Longchamps'), ('Auteuil')
;
SELECT '' AS HIPPODROME, * FROM HIPPODROME
;
INSERT INTO PRIX (PrixNom)
VALUES ('Grand prix du roi'), ('Grand prix de la reine')
;
SELECT '' AS PRIX, * FROM PRIX
;
INSERT INTO TERRAIN (TerrainEtat)
VALUES ('sec'), ('mou'), ('boueux'), ('lourd')
;
SELECT '' AS TERRAIN, * FROM TERRAIN
;
INSERT INTO REUNION (TerrainId, HippodromeId, ReunionNumero, ReunionDate)
SELECT
(SELECT TerrainId FROM TERRAIN WHERE TerrainEtat = 'lourd')
, (SELECT HippodromeId FROM HIPPODROME WHERE HippodromeNom = 'Auteuil')
, 87, '2020-01-29'
;
INSERT INTO REUNION (TerrainId, HippodromeId, ReunionNumero, ReunionDate)
SELECT
(SELECT TerrainId FROM TERRAIN WHERE TerrainEtat = 'sec')
, (SELECT HippodromeId FROM HIPPODROME WHERE HippodromeNom = 'Auteuil')
, 116, '2020-02-17'
;
SELECT '' AS REUNION, * FROM REUNION
;
INSERT INTO COURSE (ReunionId, PrixId, CourseNumero, CourseDuree, CourseAllocation)
SELECT
(SELECT ReunionId FROM REUNION WHERE ReunionNumero = 116)
, (SELECT PrixId FROM PRIX WHERE PrixNom = 'Grand prix de la reine')
, 67, '02:05', 5000
;
SELECT '' AS COURSE, * FROM COURSE
;
Au résultat :
HIPPODROME (HippodromeId HippodromeNom)
1 Longchamps
2 Auteuil
PRIX (PrixId PrixNom)
1 Grand prix du roi
2 Grand prix de la reine
TERRAIN (TerrainId TerrainEtat)
1 sec
2 mou
3 boueux
4 lourd
REUNION (ReunionId TerrainId HippodromeId ReunionNumero ReunionDate)
1 4 2 87 2020-01-29
2 1 2 116 2020-02-17
COURSE (ReunionId CourseId PrixId CourseNumero CourseDuree CourseAllocation)
2 1 2 67 00:02:05 5000
Partager