PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Clé primaire pour plusieurs colonnes dans PostgreSQL ?

Il ne peut y en avoir qu'un clé primaire par table - comme indiqué par le mot "primaire".
Vous pouvez avoir des UNIQUE colonnes comme :

CREATE TABLE test(
   sl_no int PRIMARY KEY,  -- NOT NULL due to PK
   emp_id int UNIQUE NOT NULL,
   emp_name text,
   emp_addr text
);

Colonnes qui sont (partie de) la PRIMARY KEY sont marqués NOT NULL automatiquement.

Ou utilisez une contrainte de table au lieu d'une contrainte de colonne pour créer un seul multicolonne clé primaire . Ceci est sémantiquement différent de ce qui précède :maintenant, seule la combinaison des deux colonnes doit être unique, chaque colonne peut contenir des doublons par elle-même.

CREATE TABLE test(
   sl_no int,     -- NOT NULL due to PK below
   emp_id int ,   -- NOT NULL due to PK below
   emp_name text,
   emp_addr text,
   PRIMARY KEY (sl_no, emp_id)
);

UNIQUE multicolonne des contraintes sont également possibles.

À part :n'utilisez pas les identifiants CaMeL-case dans Postgres. Utilisez des identificateurs légaux en minuscules pour ne jamais avoir à utiliser de guillemets doubles. Vous facilite la vie. Voir :