Comprendre les clés primaires MySQL
Les clés primaires servent d’identifiants uniques pour les enregistrements d’une table, tandis que les clés étrangères sont utilisées pour relier des tables connexes entre elles. Lors de la conception d’un ensemble de tables de base de données, il est important de spécifier quels champs seront utilisés pour les clés primaires et étrangères afin de clarifier à la fois la structure dans la table et les relations entre les tables.
Clefs primaires
Vous pouvez spécifier une clé primaire pour la table avec la contrainte PRIMARY KEY. Dans un schéma de base de données bien conçu, une clé primaire sert d’identifiant unique et immuable pour chaque enregistrement. Si une clé est déclarée primaire, cela implique généralement que les valeurs qu’elle contient seront rarement modifiées.
La contrainte PRIMARY KEY peut être considérée comme une combinaison des contraintes NOT NULL et UNIQUE, car elle exige que les valeurs du champ spécifié ne soient ni NULL ni répétées dans aucune autre ligne. Considérez l’exemple suivant, qui démontre en définissant le champ numericAirportID comme clé primaire pour la table airport.
mysql> CREATE TABLE airport ( -> AirportID smallint(5) unsigned NOT NULL, -> AirportCode char(3), -> AirportName varchar(255) NOT NULL, -> CityName varchar(255) NOT NULL, -> CountryCode char(2) NOT NULL, -> NumRunways INT(11) unsigned NOT NULL, -> NumTerminals tinyint(1) unsigned NOT NULL, -> PRIMARY KEY (AirportID) -> ) ENGINE=MYISAM;Query OK, 0 rows affected (0.05 sec)
Dans cette situation, parce que le champ AirportID est défini comme clé primaire, MySQL n’autorisera pas la duplication ou les valeurs NULL dans ce champ. Cela permet à l’administrateur de la base de données de s’assurer que chaque aéroport répertorié dans la table a une valeur numérique unique, appliquant ainsi un haut degré de cohérence sur les données stockées.
Les contraintes de clé primaire peuvent être spécifiées pour un seul champ ou pour un composite de plusieurs champs. Considérez l’exemple suivant, qui démontre en construisant une table contenant une clé primaire composite:
mysql> CREATE TABLE flightdep ( -> FlightID SMALLINT(6) NOT NULL, -> DepDay TINYINT(4) NOT NULL, -> DepTime TIME NOT NULL, -> PRIMARY KEY (FlightID, DepDay, DepTime) -> ) ENGINE=MyISAM;Query OK, 0 rows affected (0.96 sec)
Dans ce cas, les règles de la table permettent la répétition du numéro de vol, du jour de départ ou de l’heure de départ, mais pas des trois ensemble. Regardez ce qui se passe si vous essayez :
mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');Query OK, 1 row affected (0.20 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,2,'00:01');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:02');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');ERROR 1062 (23000): Duplicate entry '511-1-00:01:00' for key 'PRIMARY'
Les clés primaires composites peuvent s’avérer pratiques lorsqu’un enregistrement doit être identifié de manière unique par une combinaison de ses attributs, plutôt que par un seul attribut.