• 12 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 5/15/23

Identifiez les lignes de votre table avec votre clé primaire

Qu'est-ce qu'une clé primaire ?

C'est quoi une clé ?

Dans la vie quotidienne, une clé sert à ouvrir une porte pour accéder à votre maison. Une caractéristique essentielle d'une clé est que sa forme doit être unique, car si votre clé est identique à celle de la maison de votre voisin, il se pose un problème évident ! Comme il n'y a qu'une clé par maison, on peut dire que votre clé, c'est un peu la « carte d'identité » de votre maison !

On vient de voir ici deux notions fondamentales : celle de l'identité et celle de l'unicité. Et comme nous venons de le voir, ces notions sont intimement liées !

Dans une table, une clé a donc pour vocation d'accéder à une ligne, et donc de l'identifier. Cette clé, on l'appelle clé primaire.

Pour déterminer une clé primaire pour votre table, il faut vous poser la question suivante :

Quelles sont les informations minimales dont j'ai besoin pour identifier de manière unique un objet ?

Cette question peut être reformulée en « Quelles sont les colonnes dont j'ai besoin au minimum pour identifier à coup sûr une ligne de ma table ? ». Ce que cela signifie, c'est que si on est sûr·e que n'importe quelle ligne peut être retrouvée en connaissant la valeur de quelques-unes de ses colonnes, c'est que ce groupe de colonnes peut être une clé primaire !

Cette illustration vous aidera peut-être à visualiser ce concept :

Exemple de différentes clés primaires déterminées par deux attributs pour accéder à une ligne de données unique.
Une clé primaire est déterminée par des attributs

Je vous donne un exemple juste en dessous.

Définissez la clé primaire adaptée

La notion d'identification est essentielle pour les facteurs qui doivent identifier de manière certaine les logements pour lesquels ils distribuent le courrier. Imaginez une table qui répertorie des logements, possédant ces colonnes :

  1. Type de logement (maison, appartement, etc.).

  2. Superficie.

  3. N° de logement (ex. : appartement numéro 203).

  4. N° de voie (ex. : 5).

  5. Complément (ex. : 5 bis).

  6. Intitulé de la voie (ex. : rue de la République).

  7. Commune (ex. : Passillac-les-Flots).

  8. Code postal.

  9. Pays.

La clé primaire de cette table, ce sera le groupe de colonnes minimum que l'on peut donner au facteur pour qu'il soit sûr de pouvoir distribuer un courrier au bon logement.

Si on lui donne uniquement les colonnes  intitulé de la voie  ,  code postal  et  commune  (par exemple « rue de la République, 93124 Passillac-les-Flots »), il lui sera impossible de donner le courrier, car la rue de la République de Passillac contient plusieurs logements.

Si au contraire, on lui donne toutes les colonnes, le courrier pourra à coup sûr être distribué. Cependant, le groupe de colonnes 1 à 9 n'est pas considéré comme minimal : la superficie n'a pas besoin d'être connue pour distribuer un courrier.  superficie  ne doit donc pas figurer dans la clé primaire.

Une bonne clé primaire pour cette table sera donc le groupe des colonnes 3 à 9 (remarque : même si pour une maison, la colonne  n° de logement  n'a pas besoin d'être connue, il est quand même important de la placer dans la clé primaire de la table, afin de pouvoir identifier les différents appartements d'un même immeuble).

Les colonnes qui composent la clé primaire d'une table sont souvent indiquées par les initiales anglaises PK, pour « primary key » :

La Primary Key ou clé primaire est abrégée PK dans une base de données
Exemple de Primary Key abrégée PK dans une base de données

Allez, maintenant que vous savez ce qu'est une clé primaire, je vous donne la définition “officielle” :

Voici une formulation alternative plus détaillée : “Pour qu'un groupe de colonnes soit une clé, il faut être sûr que deux lignes n'auront jamais des valeurs identiques pour ces colonnes. Ce groupe de colonnes doit être minimal, c'est-à-dire que si on retire l'une des colonnes de ce groupe, la phrase précédente n'est plus vérifiée.”

La contrainte d'unicité

Dans l'exemple ci-dessus, en choisissant les colonnes 3 à 9 comme clé primaire de la table  Logement  , on définit implicitement que deux lignes de cette table ne peuvent pas avoir des valeurs identiques pour ces colonnes. Le SGBDR vous l'interdira.

On dit que la clé primaire définit une contrainte d'unicité sur le groupe de colonnes 3 à 9.

Autrement dit, le groupe  (code_postal, commune) ne peut pas être une clé primaire car les lignes « 3 rue de la Charrue-avant-les-bœufs, 93124 Passillac-les-Flots » et « 5 rue du Pangolin-superstitieux, 93124 Passillac-les-Flots » ont toutes les deux les mêmes valeurs pour  (code_postal, commune)  : ces valeurs sont  93124  et  Passillac-les-Flots  . Ce groupe de colonnes violerait la contrainte d'unicité.

Une clé primaire définit la nature des lignes de la table

Quand vous êtes en présence d'une table, il est très important de connaître la clé primaire, car c'est ce qui détermine la nature des objets qu'il y a dans la table. Je m'explique.

Si on reprend l'exemple du courrier à acheminer. Imaginons 2 cas :

  1. La clé primaire est  code_postal  .

  2. La clé primaire est le groupe de colonnes 3 à 9.

Si on se place dans le cas 1, cela signifie que 2 lignes de la table ne peuvent pas avoir le même code postal. Il en découle qu'il n'y a qu'une ligne par code postal. Et s'il n'y a qu'une ligne par code postal, ça veut dire qu'une ligne représente un code postal. Autrement dit, « 1 ligne = 1 code postal ».

Si par contre on se place dans le cas 2, alors cela signifie qu'il n'y a pas 2 lignes de la table qui ont la même adresse. Donc « 1 ligne = 1 adresse ».

Vous voyez, la clé primaire vous aide à savoir quelle est la nature des lignes de votre table !

Clé artificielle

Parmi les colonnes d'une table, il est parfois impossible de trouver une clé primaire. Dans d'autres cas, la clé primaire est trop complexe (trop de colonnes, par exemple). Dans ce cas, il est possible de créer une clé primaire artificielle.

Une clé artificielle est une colonne que l'on ajoute à la table. Cette colonne n'a pas de réelle signification (contrairement aux autres colonnes), mais sa seule fonction est d'identifier de manière unique les lignes de la table. C'est donc un identifiant.

Représentez votre clé primaire

En SQL, on définit la clé primaire grâce au mot clé PRIMARY KEY, et on écrit ensuite la/les colonne(s) qui constituent la clé primaire.

C'est ce que vous aviez fait pour votre table  entity2  , rappelez-vous :

CREATE TABLE entity2 (
	id INTEGER,
	name TEXT NOT NULL,
	jurisdiction TEXT,
	jurisdiction_description TEXT,
	incorporation_date DATE,
	status TEXT,
	service_provider TEXT,
	id_address INTEGER,
	source TEXT,
	note TEXT,
	end_date DATE,
	url TEXT,
	lifetime INTEGER,
	PRIMARY KEY(id)
)

Ici, la clé primaire était une clé artificielle, soit la colonne  id  .

Mais rappelez-vous qu'une clé primaire peut être composée de plusieurs colonnes. C'était le cas avec la table des adresses plus haut dans ce chapitre. Pour cette table, on aurait écrit ceci :

CREATE TABLE adresse_postale (
    type_logement TEXT,
    superficie INTEGER,
    numero_logement INTEGER,
    numero_voie INTEGER,
    complement TEXT,
    intitule_voie TEXT,
    commune TEXT,
    code_postal TEXT,
    pays TEXT,
    PRIMARY KEY (numero_logement, numero_voie, complement, intitule_voie, commune, code_postal, pays)
)

À vous de jouer

Contexte

Ayant appris que vous travaillez sur les Panama Papers, l'un de vos collègues journalistes d'investigation vous envoie un ficher Excel issu d'une table d'une base de données relationnelle. Voici son message :

Tiens, l'une de mes sources m'a transmis ceci. Cette personne (ma source) a eu accès aux comptes mails de 2 cabinets d'avocats ayant des activités au Panama, dont voici les noms : Avocats Conseils Corp. et Guacamole Associates Ltd.

Malheureusement, elle n'a pas pu récupérer les e-mails de ces comptes, mais elle a pu récupérer le carnet d'adresses de chacun de ces 2 comptes mails. C'est mieux que rien : ces carnets d'adresses contiennent des contacts (nom, prénom, e-mail, date de création du contact).

Même s'il n'y a pas de preuve formelle, il est très probable qu'une personne (un contact) présente dans l'un des 2 carnets d'adresses ait eu des échanges avec l'un des 2 cabinets d'avocats ! Tu me parlais notamment d'une personne sur laquelle tu enquêtais, Annie Versaire : son adresse mail était enregistrée dans le carnet d'adresses de Avocats Conseils Corp. ; cela peut t'orienter dans ton enquête !

Consignes

Vous décidez de rentrer cette table dans votre SGBDR. Choisissez une clé primaire, puis écrivez le code SQL qui permet de créer cette table (juste la table, pas les données qui vont dedans) :

compte_mail

mail

nom

prenom

date_creation

Avocats Conseils Corp.

eva.poree.389@gmx.com

Eva

Porée

2010-01-03

Avocats Conseils Corp.

ali.gator2892@protonmail.com

Ali

Gator

2010-02-01

Avocats Conseils Corp.

annie_versaire2983@gmx.com

Annie

Versaire

2010-10-04

Guacamole Associates Ltd.

alex_ception@imag.com

Alex

Ception

2010-02-02

Guacamole Associates Ltd.

ali.gator2892@protonmail.com

Ali

Gator

2009-09-10

Guacamole Associates Ltd.

eva.poree.389@gmx.com

Eva

Poree

2010-05-13

Vérifiez votre travail

CREATE TABLE compte (
	compte_mail TEXT,
	mail TEXT,
	nom TEXT,
	prenom TEXT,
	date_creation DATE,
	PRIMARY KEY (compte_mail, mail)
)

Le clé primaire est  (compte_mail, mail)  .

En effet, l'adresse mail du contact ne peut pas suffire à lui seul, car 2 adresses mail peuvent être présentes dans 2 carnets d'adresses différents (c'est d'ailleurs le cas des adresses mail d'Ali Gator et d'Éva Porée). Les noms et prénoms ne peuvent pas être inclus dans la clé primaire, car il est possible que plusieurs personnes aient à la fois le même prénom et le même nom.

En résumé

  • La clé primaire d'une table est un groupe de colonnes minimum permettant d'identifier une ligne d'une table. 

  • Une clé primaire a donc forcément une contrainte d'unicité.

  • Dans certains cas, il est impossible de trouver une clé primaire parmi les colonnes présentes. Dans d'autres cas, la clé primaire est trop complexe. On crée alors une clé primaire artificielle.…

  • Une clé primaire se dit en anglais primary key (PK).

Vous en savez plus sur les clés primaires désormais. Dans le prochain chapitre, nous verrons comment mettre en relation plusieurs tables à l'aide de clés étrangères.

Example of certificate of achievement
Example of certificate of achievement