Modérateur PHPfrance |
2575 Messages
10 déc. 2008, 17:30
Si tu ne veux pas que la contrainte relationnelle t'empêche de modifier ou supprimer des champs liées (clé étrangère/clé primaire) il faut autoriser les modifications et suppressions en cascade dans la définition de la relation. La solution n'est pas de remettre en cause le rôle des clés étrangères qui assurent le lien entre les tables. Si tu remets en cause un tel concept, pourquoi alors opter pour l'usage d'une base de données relationnelle.
Voici comment activer les modifications et suppressions en cascade sur une relation entre deux tables.
Je rappelle pour cela que la relation est définie dans la table qui contient la clé étrangère et qui pointe vers la clé primaire de la table liée. Voici donc comment :
Soit les 2 tables de l'exemple :
- Table: client (id, nom) et Table: commande (numero, date, id_client)
La clé primaire de la table client est le champ (id) et celle de la table commande est le champ (numero)
La clé étrangère est le champ (id_client) qui se trouve dans la table commande et qui n'est que le sosie ou la copie du champ (id) de la table client.
La clé étrangère (id_client) assure donc le lien entre un client et ses commandes pour éviter de devoir renseigner toutes les information du client quand on lui crée des commandes.
Voici, le code SQL pour déclarer les tables :
Code : Tout sélectionner
Create Table client(
id int not null,
nom varchar(20) not null,
primary key (id)
);
Create Table commande (
numero int not null,
date datetime not null,
id_client int not null,
primary key (numero)
);
Voici le code SQL pour définir la relation avec modifications et suppressions en cascade:
Code : Tout sélectionner
Alter Table commande
Add Constraint 'fk_commande_client' Foreign Key (id_client) References client(id)
ON Update Cascade
ON Delete Cascade;
Par contre, si les tables et la relation sont déjà définies, on peut modifier la relation par exemple avec le code suivant (en spécifiant Alter au lieu de Add) :
Code : Tout sélectionner
Alter Table commande
Alter Constraint 'fk_commande_client' Foreign Key (id_client) References client(id)
ON Update Cascade
ON Delete Cascade;
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène