2016-05-21 10 views
0

Ich habe die folgende Tabelle in Postgres erstellt ...Ist eine 'serial' Spalte automatisch ein Primärschlüssel in PostgreSQL?

create table printq (
    model varchar(20), 
    session integer, 
    timestamp timestamp DEFAULT now(), 
    id serial); 

Es scheint genau das zu tun, was ich es brauche ... es auto-Schritte der id-Spalte, wenn ich die Tabelle klar mit gestutzt " RESTART IDENTITY "Es setzt die Reihenfolge zurück (weshalb ich die Tabelle an erster Stelle neu aufgebaut habe - die ID-Spalte, die beim Abschneiden nicht neu gestartet wird)

Wie auch immer, wenn ich ein \ d auf dem Tisch mache, ich tu ' Ich sehe nichts über einen Primärschlüssel.

Table "public.printq" 
    Column |   Type    |      Modifiers      
-----------+-----------------------------+----------------------------------------------------- 
model  | character varying(20)  | 
session | integer      | 
timestamp | timestamp without time zone | default now() 
id  | integer      | not null default nextval('printq_id_seq'::regclass) 

Drei Fragen:

  • Ist die ID-Spalte bereits ein Primärschlüssel, da es auto-Schritten, oder nicht?

  • Wenn nicht, warum sollte diese Tabelle einen Primärschlüssel benötigen, da es scheint zu funktionieren? Ich weiß im Grunde jeder Tisch soll einen Primärschlüssel haben, aber warum genau?

  • Schließlich würde der \ d Befehl mir sagen, ob diese Tabelle einen Primärschlüssel hatte? Wenn nicht, was würde mir sagen?

Antwort

2
  1. Nein, verwenden id serial primary key dafür.
  2. Nun, eine Tabelle "braucht" eigentlich keinen Primärschlüssel. Es kann ohne PK leben, es kann ohne Autoinkrementierungsfeld leben, es kann doppelte Zeilen enthalten. Aber in der Relationstheorie (zu der SQL gehört) ist jede Relation (d. H. Tabelle) eine Menge (im mathematischen Sinne) von Zeilen. Doppelte Zeilen sind also nicht erlaubt, sie sind in Sätzen einfach nicht möglich. Und daher hat jede Relation ein Feld (oder mehrere Felder), das für alle Beziehungen eindeutige Werte hat. Ein solches Feld kann verwendet werden, um eine Zeile eindeutig zu identifizieren, und einer der möglichen eindeutigen Schlüssel wird als Primärschlüssel bezeichnet. Ein solcher Schlüssel ist normalerweise sehr nützlich, um die Zeilen zu identifizieren, deshalb sollten Tabellen sie haben. Aber technisch sind sie nicht erforderlich.
  3. Ja, wird es.
Verwandte Themen