Clés primaires en SQL

Introduction aux clés primaires

Les clés primaires sont des colonnes spécifiques qui servent à identifier de manière unique chaque ligne d'une table dans une base de données SQL. Elles jouent un rôle crucial pour garantir l'intégrité des données dans vos applications.

Syntaxe des clés primaires

Pour définir une clé primaire lors de la création d'une nouvelle table, utilisez le code suivant :

CREATE TABLE table_cle (
  id INTEGER PRIMARY KEY,
  colonne_1 TEXT,
  colonne_2 INTEGER
);

La contrainte de clé primaire impose plusieurs conditions : - Aucune valeur ne doit être NULL. - Chaque valeur doit être unique (par exemple, deux entrées dans une table clients ne doivent pas partager le même customer_id). - Une seule clé primaire par table est autorisée.

Gestion des violations de contrainte

Si une tentative d'insertion d'une ligne avec une clé primaire déjà existante est effectuée, cela engendrera une violation de contrainte qui empêchera l'ajout de cette nouvelle ligne. Si une table a été créée sans clé primaire, il est possible d'en ajouter une à l'aide de la commande ALTER TABLE :

ALTER TABLE nom_de_la_table
ADD PRIMARY KEY (id);

Les clés étrangères

Lorsqu'une clé primaire d'une table apparaît dans une autre table, on parle de clé étrangère. Cela permet d'établir des relations entre les deux tables. Voici un exemple avec une table clients :

CREATE TABLE clients (
  customer_id INTEGER NOT NULL,
  first_name VARCHAR(255),
  last_name VARCHAR(255)
);

La table des commandes serait alors liée à la table des clients par une clé étrangère :

CREATE TABLE commandes (
  order_id INTEGER NOT NULL,
  total_cost FLOAT,
  purchase_date DATE,
  customer_id INTEGER NOT NULL,
  PRIMARY KEY (order_id),
  FOREIGN KEY (customer_id) REFERENCES clients(customer_id)
);

Clés composites

Il arrive qu'une seule clé primaire ne suffise pas à identifier de manière unique une ligne. Dans ce cas, plusieurs colonnes peuvent constituer une clé composite. Par exemple, un registre de véhicules pourrait nécessiter à la fois un engine_id et un body_id pour identifier chaque véhicule. Voici comment pourrait être conçue une table pour enregistrer ces données :

CREATE TABLE registre_vehicules (
  engine_id INTEGER,
  body_id TEXT,
  gearbox_id INTEGER,
  purchase_date DATE,
  PRIMARY KEY(engine_id, body_id, purchase_date)
);