Bonjour,

Je me retrouve avec un problème ou quand je crée ma table Constructeur et Modele et qu'ensuite je fais mes insertion et bien je vois que l'Id_Modele ne prends pas des valeurs en continue mais revient à 1 quand l'id_Constructeur change, ce sera plus parlant en image voici la table Modele :

Nom : tableModele.png
Affichages : 196
Taille : 48,4 Ko

Là on voit bien que l'Id_Modele vaut 1 et 2 pour l'Id_Constructeur 1 mais ensuite pour l'Id_Constructeur 2 on repart avec Id_Modele à 1 et donc sa me pose des problèmes quand je veux faire des requêtes précise.

Voici la création de mes tables.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
 
CREATE TABLE Constructeur(
   Id_Constructeur INT AUTO_INCREMENT,
   libelle VARCHAR(50) NOT NULL,
   CONSTRAINT Constructeur_PK PRIMARY KEY(Id_Constructeur)
)ENGINE=InnoDB;
 
 
#-------------------------------------------------------------------------
# La table qui pose problème.
#-------------------------------------------------------------------------
 
CREATE TABLE Modele(
   Id_Modele INT,
   Id_Constructeur INT,
   libelle VARCHAR(50) NOT NULL,
   CONSTRAINT Modele_PK PRIMARY KEY(Id_Constructeur, Id_Modele),
   CONSTRAINT MODELE_AK UNIQUE (Id_Constructeur,Id_Modele),
   CONSTRAINT Modele_Constructeur_FK FOREIGN KEY(Id_Constructeur) REFERENCES Constructeur(Id_Constructeur),
   CONSTRAINT MODELE_UK UNIQUE (Id_Constructeur,libelle)
)ENGINE=InnoDB;
 
#-------------------------------------------------------------------------
# Les autres tables.
#-------------------------------------------------------------------------
CREATE TABLE Caracteristique(
   Id_Caracteristique INT AUTO_INCREMENT,
   libelle VARCHAR(50) NOT NULL,
   CONSTRAINT Caracteristique_PK PRIMARY KEY(Id_Caracteristique)
)ENGINE=InnoDB;
 
CREATE TABLE Caracteristique_value(
   Id_Caracteristique_value INT AUTO_INCREMENT,
   valeur VARCHAR(50),
   Id_Constructeur INT NOT NULL,
   Id_Modele INT NOT NULL,
   Id_Caracteristique INT NOT NULL,
   CONSTRAINT Caracteristique_value_PK PRIMARY KEY(Id_Caracteristique_value),
   CONSTRAINT Caracteristique_value_Modele_FK FOREIGN KEY(Id_Constructeur, Id_Modele) REFERENCES Modele(Id_Constructeur, Id_Modele),
   CONSTRAINT Caracteristique_value_Caracteristique_FK FOREIGN KEY(Id_Caracteristique) REFERENCES Caracteristique(Id_Caracteristique)
)ENGINE=InnoDB;
 
CREATE TABLE Utilisateur(
   Id_user INT AUTO_INCREMENT,
   estAdmin TINYINT(1),
   email VARCHAR(50),
   motDePasse VARCHAR(50),
   CONSTRAINT Utilisateur_PK PRIMARY KEY(Id_user)
)ENGINE=InnoDB;
 
CREATE TABLE Adresse(
   Id_Adresse INT AUTO_INCREMENT,
   adresse VARCHAR(50),
   complement VARCHAR(50),
   codePostal VARCHAR(5),
   commune VARCHAR(45),
   pays VARCHAR(50),
   CONSTRAINT Adresse_PK PRIMARY KEY(Id_Adresse)
)ENGINE=InnoDB;
 
CREATE TABLE Professionnel(
   Id_Professionnel INT AUTO_INCREMENT,
   estHomme TINYINT(1),
   societe VARCHAR(50),
   nom VARCHAR(50),
   prenom VARCHAR(50),
   siret VARCHAR(14),
   telephone VARCHAR(10),
   dateInscription DATE,
   Id_user INT NOT NULL,
   CONSTRAINT Professionnel_PK PRIMARY KEY(Id_Professionnel),
   CONSTRAINT Professionnel_Utilisateur_FK FOREIGN KEY(Id_user) REFERENCES Utilisateur(Id_user)
)ENGINE=InnoDB;
 
CREATE TABLE Garage(
   Id_Garage INT AUTO_INCREMENT,
   nom VARCHAR(50),
   email VARCHAR(50),
   telephone VARCHAR(10),
   Id_Adresse INT NOT NULL,
   Id_Professionnel INT NOT NULL,
   CONSTRAINT Garage_PK PRIMARY KEY(Id_Garage),
   CONSTRAINT Garage_Adresse_FK FOREIGN KEY(Id_Adresse) REFERENCES Adresse(Id_Adresse),
   CONSTRAINT Garage_Professionnel_FK FOREIGN KEY(Id_Professionnel) REFERENCES Professionnel(Id_Professionnel)
)ENGINE=InnoDB;
 
CREATE TABLE Annonce(
   Id_Annonce INT AUTO_INCREMENT,
   annee DATE,
   kilometrage INT,
   prix INT,
   description VARCHAR(200),
   dateAnnonce DATE,
   Immatriculation VARCHAR(50),
   garantie INT,
   reference VARCHAR(50),
   Id_Constructeur INT NOT NULL,
   Id_Modele INT NOT NULL,
   Id_Garage INT NOT NULL,
   CONSTRAINT Annonce_PK PRIMARY KEY(Id_Annonce),
   CONSTRAINT Annonce_Modele_FK FOREIGN KEY(Id_Constructeur, Id_Modele) REFERENCES Modele(Id_Constructeur, Id_Modele),
   CONSTRAINT Annonce_Garage_FK FOREIGN KEY(Id_Garage) REFERENCES Garage(Id_Garage)
)ENGINE=InnoDB;
 
CREATE TABLE Photo(
   Id_Photo INT AUTO_INCREMENT,
   emplacement VARCHAR(255),
   estPrincipal TINYINT(1),
   Id_Annonce INT NOT NULL,
   CONSTRAINT Photo_PK PRIMARY KEY(Id_Photo),
   CONSTRAINT Photo_Annonce_FK FOREIGN KEY(Id_Annonce) REFERENCES Annonce(Id_Annonce)
)ENGINE=InnoDB;
Et voici les insertions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
INSERT INTO constructeur (libelle)
VALUES 
  ('BMW'),
  ('Mercedes'),
  ('Renault'),
  ('Peugeot'),
  ('Honda'),
  ('Toyota'),
  ('Fiat'),
  ('Ford');
 
INSERT INTO modele (
  id_Constructeur,
  libelle 
)
VALUES
-- BMW
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'BMW')), 'Série 6'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'BMW')), 'Série 1'),
 
-- MERCEDES
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Mercedes')), 'Classe C4'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Mercedes')), 'Classe E5'),
 
-- RENAULT
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Renault')), 'Scenic 4'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Renault')), 'Megan 4 Rs'),
 
-- PEUGEOT
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Peugeot')), '208'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Peugeot')), '308'),
 
-- HONDA
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Honda')), 'Civic 10'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Honda')), 'Civic 8'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Honda')), 'Cr-v 5'),
 
-- TOYOTA
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Toyota')), 'Gt86'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Toyota')), 'Land Cruiser'),
 
-- Fiat
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Fiat')), 'Fullback'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Fiat')), 'Punto 3'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Fiat')), '500 C'),
 
-- FORD
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Ford')), 'Mustang 6'),
  (((SELECT id_Constructeur FROM constructeur WHERE libelle = 'Ford')), 'Puma 2');