Relations entre les tables

Dans une base de données relationnelle, les relations entre les tables sont au cœur de l'organisation des données. Les relations permettent de structurer et d'associer plusieurs tables entre elles afin de maintenir une intégrité des données et de faciliter les requêtes complexes. Ces relations se basent souvent sur l'utilisation de clés primaires et de clés étrangères pour établir des liens entre les données.

Les types de relations :

Il existe trois types principaux de relations dans les bases de données relationnelles :

  1. Relation un-à-un (1:1) :

    • Une relation un-à-un signifie qu'à chaque enregistrement d'une table correspond exactement un enregistrement dans une autre table.

    • Exemple : Si une entreprise possède un employé avec un casier judiciaire, il peut être utile de stocker ces informations dans deux tables séparées : Employes et Casiers. Chaque employé ne possède qu'un seul casier, et chaque casier ne correspond qu'à un employé.

    Modélisation :

CREATE TABLE Employes (
    id_employe INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(100),
    poste VARCHAR(100)
);

CREATE TABLE Casiers (
    id_casier INT AUTO_INCREMENT PRIMARY KEY,
    id_employe INT,
    infraction VARCHAR(255),
    date_infraction DATE,
    FOREIGN KEY (id_employe) REFERENCES Employes(id_employe)
);
  • Ici, id_employe dans la table Casiers est une clé étrangère qui pointe vers la clé primaire de Employes.

  1. Relation un-à-plusieurs (1

) :

  • Une relation un-à-plusieurs signifie qu'un enregistrement dans une table peut être lié à plusieurs enregistrements dans une autre table.

  • Exemple : Un client peut passer plusieurs commandes. Dans ce cas, un client dans la table Clients peut être lié à plusieurs enregistrements dans la table Commandes.

Modélisation :

CREATE TABLE Clients (
    id_client INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(100),
    email VARCHAR(100)
);

CREATE TABLE Commandes (
    id_commande INT AUTO_INCREMENT PRIMARY KEY,
    id_client INT,
    date_commande DATE,
    montant_total DECIMAL(10, 2),
    FOREIGN KEY (id_client) REFERENCES Clients(id_client)
);
    • Dans cet exemple, chaque commande est liée à un client grâce à la clé étrangère id_client, mais un client peut avoir plusieurs commandes.

  1. Relation plusieurs-à-plusieurs (N

) :

  • Dans une relation plusieurs-à-plusieurs, plusieurs enregistrements dans une table peuvent être liés à plusieurs enregistrements dans une autre table. Ce type de relation nécessite généralement une table intermédiaire (ou table de jointure) pour gérer les associations.

  • Exemple : Un étudiant peut suivre plusieurs cours, et un cours peut être suivi par plusieurs étudiants. Cela nécessite une table intermédiaire qui relie les étudiants aux cours.

Modélisation :

CREATE TABLE Etudiants (
    id_etudiant INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(100)
);

CREATE TABLE Cours (
    id_cours INT AUTO_INCREMENT PRIMARY KEY,
    nom_cours VARCHAR(100)
);

CREATE TABLE Etudiant_Cours (
    id_etudiant INT,
    id_cours INT,
    FOREIGN KEY (id_etudiant) REFERENCES Etudiants(id_etudiant),
    FOREIGN KEY (id_cours) REFERENCES Cours(id_cours)
);
    • La table Etudiant_Cours gère la relation entre les étudiants et les cours, reliant chaque étudiant à plusieurs cours et chaque cours à plusieurs étudiants.

Clés primaires et clés étrangères

Pour maintenir l'intégrité des données et gérer les relations, il est essentiel d'utiliser les clés primaires et clés étrangères :

  • Clé primaire (PRIMARY KEY) : Une colonne ou un ensemble de colonnes qui identifie de manière unique chaque enregistrement dans une table. Chaque table doit avoir une clé primaire.

    Exemple : Dans la table Clients, la colonne id_client est une clé primaire, assurant que chaque client a un identifiant unique.

  • Clé étrangère (FOREIGN KEY) : Une colonne dans une table qui fait référence à la clé primaire d'une autre table. Elle est utilisée pour établir une relation entre les deux tables.

    Exemple : Dans la table Commandes, la colonne id_client est une clé étrangère qui fait référence à la colonne id_client de la table Clients.

Intégrité référentielle

L'utilisation de clés étrangères garantit l'intégrité référentielle, c'est-à-dire que les relations entre les tables sont cohérentes. Cela permet d'éviter, par exemple, d'insérer une commande pour un client qui n'existe pas dans la table Clients.

  • Lorsqu'une clé étrangère est définie, MySQL applique des contraintes pour assurer que les relations sont respectées :

    • ON DELETE CASCADE : Si un enregistrement dans la table parent est supprimé, les enregistrements correspondants dans la table enfant sont également supprimés.

    • ON UPDATE CASCADE : Si la clé primaire de la table parent est modifiée, la clé étrangère dans la table enfant est également mise à jour.

    Exemple :

CREATE TABLE Commandes (
    id_commande INT AUTO_INCREMENT PRIMARY KEY,
    id_client INT,
    date_commande DATE,
    montant_total DECIMAL(10, 2),
    FOREIGN KEY (id_client) REFERENCES Clients(id_client)
    ON DELETE CASCADE
);

Ici, si un client est supprimé de la table Clients, toutes les commandes associées à ce client seront également supprimées de la table Commandes.

Cette section sur les relations entre les tables vous offre une vue approfondie sur les types de relations que vous pouvez implémenter dans une base de données MySQL, ainsi que sur la manière de les modéliser avec des clés primaires et étrangères.

Exercices

Last updated