PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie und warum Primärschlüssel zu meiner SQL-Datenbanktabelle hinzufügen, wenn ich bereits einen Index habe

Ein Primärschlüssel ist eine Einschränkung, die angibt, dass die Werte in seinen Spalten (gegenseitig) eindeutig und nicht null sein müssen. Auf diese Weise kann garantiert werden, dass jede Zeile in der Tabelle eindeutig identifiziert wird, was am nützlichsten ist, wenn Sie Fremdschlüssel erstellen möchten, die auf diese Tabelle verweisen. Es lohnt sich immer noch, wenn Sie keine anderen Tabellen haben, da es verhindert, dass Ihre Tabelle in einen schlechten Zustand gerät, wenn Sie beispielsweise an einem bestimmten Datum mehr als einen gleichen Quellwert haben.

Die Primärschlüsselfelder haben fast immer einen Index und werden oft für Suchvorgänge und JOINs verwendet, aber die beiden Konzepte sind getrennt.

Einige DBMS (z. B. MySQL, SQL Server) erstellen automatisch einen gruppierten Index für den Primärschlüssel, was bedeutet, dass die Daten in der Tabelle auf der Festplatte nach den Feldern sortiert werden, aus denen der Primärschlüssel besteht, um die oben genannten allgemeinen Operationen noch schneller zu machen. Postgres tut dies jedoch standardmäßig nicht.

Sie können den Primärschlüssel bei der Tabellenerstellung mit der folgenden Syntax angeben:

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

Sie können auch ein neues, automatisch inkrementierendes Integer-Feld hinzufügen, das als Primärschlüssel dient (allgemein als Ersatzschlüssel bezeichnet). oder künstlicher Schlüssel ). Möglicherweise möchten Sie dies tun, wenn Sie keine anderen guten Kandidaten in Ihren Datenelementen haben, aber es kann auch andere Vorteile haben (z. B. möglicherweise schnellere JOINs).

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