2016-05-21 3 views
0

Я создал следующую таблицу в Postgres ...Является ли «последовательный» столбец автоматически первичным ключом в PostgreSQL?

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

Это, кажется, делает именно то, что мне это нужно, чтобы ... Он автоматически увеличивает значение столбца ID, когда я очистить таблицу с помощью усечения " RESTART IDENTITY ", он сбрасывает последовательность (именно поэтому я перестроил таблицу в первую очередь - столбец идентификатора, используемый для перезапуска при усечении)

В любом случае, когда я делаю a \ d на столе, что-нибудь о первичном ключе.

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) 

Три вопроса:

  • ли столбец ID уже первичный ключ, так как она автоматически приращений, или нет?

  • Если нет, зачем этой таблице нужен первичный ключ, так как он работает нормально? Я знаю, что каждая таблица должна иметь первичный ключ, но почему именно?

  • И наконец, будет ли команда \ d сказать, есть ли в этой таблице первичный ключ? Если нет, что бы мне сказали?

ответ

2
  1. Нет, используйте id serial primary key для этого.
  2. Ну, таблица фактически не нужна первичным ключом. Он может жить без ПК, он может жить без поля автоинкремента, он может содержать повторяющиеся строки. Но в теории относительности (над которой построен SQL) каждое отношение (например, таблица) представляет собой набор (в математическом смысле) строк. Таким образом, дублирующиеся строки не допускаются, их просто невозможно в наборах. И поэтому каждое отношение имеет поле (или несколько полей), которое имеет уникальные значения для всех отношений. Такое поле может использоваться для однозначной идентификации строки, а один из возможных уникальных ключей называется первичным ключом. Такой ключ обычно очень полезен для идентификации строк, поэтому таблицы должны иметь их. Но технически они не требуются.
  3. Да, это будет.