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

Comment et pourquoi ajouter des clés primaires à ma table de base de données SQL alors que j'ai déjà un index

Une clé primaire est une contrainte qui spécifie que les valeurs de sa ou ses colonnes doivent être (mutuellement) uniques et non nulles. Cela permet de garantir une identification unique de chaque ligne de la table, ce qui est particulièrement utile lorsque vous souhaitez créer des clés étrangères faisant référence à cette table. Cela vaut toujours la peine si vous n'avez pas d'autres tables, car cela empêchera votre table d'entrer dans un mauvais état où, par exemple, vous avez plus d'une valeur source identique à une date particulière.

Le ou les champs de clé primaire auront presque toujours un index et ils sont souvent utilisés pour les recherches et les JOIN, mais les deux concepts sont distincts.

Certains SGBD (par exemple MySQL, SQL Server) créent automatiquement un index clusterisé sur la clé primaire, ce qui signifie que les données de la table sont triées sur le disque par le ou les champs comprenant la clé primaire pour rendre les opérations courantes ci-dessus encore plus rapides. Cependant, postgres ne le fait pas par défaut.

Vous pouvez spécifier la clé primaire lors de la création de la table en utilisant la syntaxe suivante :

create table datatable 
(
    date date, 
    yesterday real, 
    today real, 
    tomorrow real, 
    reading real, 
    source varchar,
    PRIMARY KEY (source, date)
)

Vous pouvez également ajouter un nouveau champ entier à incrémentation automatique pour agir comme votre clé primaire (généralement appelée clé de substitution ou clé artificielle ). Vous voudrez peut-être le faire si vous n'avez pas d'autres bons candidats dans vos éléments de données, mais cela peut également avoir d'autres avantages (JOIN potentiellement plus rapides par exemple).

create table datatable 
(
    id serial primary key,
    date date, 
    yesterday real, 
    today real, 
    tomorrow real, 
    reading real, 
    source varchar
)