non, dans un SGBD tu spécifies ce qu'on appelle une clé étrangère (foreign key) qui indique que ton champs doit contenir une valeur de la clé primaire d'une autre table. mais ce n'est pas pour autant qu'il va te faire une liste déroulante.
si tu crées ces deux tables :
Code :
- create table marque as
- (
- id numeric primary key,
- nom varchar(50) not null
- )
- go
- create table modele as
- (
- id numeric primary key,
- nom varchar(50) not null,
- marque_id null
- )
- go
|
=> tu peux créer ce jeu de données :
marque :
1 Renault
2 Citroën
3 Peugeot
modele :
1 205 3
2 206 3
3 AX 2
4 Xara 2
5 R5 1
6 Laguna 1
7 Escort 4
8 Panda null
|
On voit que l'Escort fait référence à une marque qui n'existe pas, et c'est mal.
La Panda ne fait référence à aucune marque. Ca peut être gênant aussi.
Tu peux donc ajouter une clé étrangère entre les deux tables :
Code :
- ALTER TABLE modele
- ADD CONSTRAINT fk_marque
- FOREIGN KEY (marque_id)
- REFERENCES marque (id) ON DELETE CASCADE
|
=> Ici, tu indiques que la colonne modele.marque_id fait référence à la colonne marque.id
Ainsi, tu ne peux mettre dans modele.marque_id que des valeurs issues de marque.id (donc des marques qui existent), ou null
=> Ainsi, tu ne pourra plus écrire la ligne "Escort" car tu n'as pas de marque 4, mais toujours la ligne "Panda", puisqu'elle ne fait référence à aucune marque
Si tu veux que la marque soit obligatoire, alors tu mets "modele.marque_id" à "not null" et tu seras obligé de fournir une marque à la création d'un modèle de voiture.
Dans mon cas le "delete cascade" indique que si tu supprimes une marque, ça va supprimer en cascade tous les modèles de voitures qui sont de cette marque (à utiliser avec précaution )
Message édité par MagicBuzz le 24-08-2006 à 16:48:42