Первичный ключ определяется многими атрибутами? - PullRequest
0 голосов
/ 30 июля 2009

Можно ли определить первичный ключ по трем атрибутам? Я использую Visual Paradigm и Postgres.

CREATE TABLE answers (
  time                          SERIAL NOT NULL, 
  "{Users}{userID}user_id"     int4 NOT NULL, 
  "{Users}{userID}question_id" int4 NOT NULL, 
  reply                        varchar(255), 
  PRIMARY KEY (time, "{Users}{userID}user_id", "{Users}{userID}question_id"));

A картинка может прояснить вопрос.

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

Да, вы можете, как вы показали. (Хотя я ставлю под сомнение ваши названия колонок 2. и 3.)

Из документов :

"Первичные ключи также могут ограничивать более одного столбца; синтаксис аналогичен уникальным ограничениям:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

Первичный ключ указывает, что столбец или группа столбцов могут использоваться в качестве уникального идентификатора для строк в таблице. (Это является прямым следствием определения первичного ключа. Обратите внимание, что уникальное ограничение само по себе не предоставляет уникальный идентификатор, поскольку оно не исключает нулевые значения.) Это полезно как для целей документирования, так и для клиентских приложений. Например, приложение с графическим интерфейсом, которое позволяет изменять значения строк, вероятно, должно знать первичный ключ таблицы, чтобы иметь возможность уникально идентифицировать строки.

Таблица может иметь не более одного первичного ключа (хотя она может иметь множество уникальных и ненулевых ограничений). Теория реляционных баз данных гласит, что каждая таблица должна иметь первичный ключ. Это правило не применяется в PostgreSQL, но обычно лучше его соблюдать. «

0 голосов
/ 30 июля 2009
  1. да, вы можете
  2. если бы вы запустили его - вы бы увидели его в кратчайшие сроки.
  3. Я бы действительно, действительно, действительно предложил бы переосмыслить соглашение об именах. столбец времени, который содержит последовательное целое число? имена столбцов типа "{Users} {userID} user_id"? о мой.
0 голосов
/ 30 июля 2009

Да, вы можете. Именно такой пример есть в документации . . Однако я не знаком с терминами в скобках, которые вы используете. Делаете ли вы некоторую оценку переменных перед созданием схемы базы данных?

...