Как ссылаться на таблицу postgres с несколькими первичными ключами - PullRequest
0 голосов
/ 07 марта 2020

Как я могу создать таблицу внешних ссылок со ссылкой на эту таблицу?

CREATE TABLE reviewer (
  screen_name integer,
  identity_provider text
  CONSTRAINT identity PRIMARY KEY (screen_name, identity_provider)
);

Это то, что я пробовал до сих пор:

CREATE TABLE business_reviewer_xref (
  reviewer_screen_name integer,
  reviewer_identity_provider text,
  CONSTRAINT reviewer_identity UNIQUE (reviewer_screen_name, reviewer_identity_provider),
  reviewer_identity REFERENCES reviewer(identity)
);
CREATE TABLE business_reviewer_xref (
  reviewer_screen_name integer,
  reviewer_identity constraint REFERENCES reviewer(identity)
);
CREATE TABLE business_reviewer_xref (
  reviewer_screen_name integer,
  reviewer_identity REFERENCES reviewer(identity)
);

1 Ответ

2 голосов
/ 07 марта 2020

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

Чтобы определить ограничение внешнего ключа, перечислите соответствующие столбцы в ссылке Таблица в том же порядке, что и их аналоги, встречаются в ограничении первичного ключа в ссылочной таблице в определяющем кортеже внешнего ключа. Также сохраняйте порядок в определении кортежа указанных столбцов:

В вашем случае:

CREATE TABLE business_reviewer_xref
             (reviewer_screen_name integer,
              reviewer_identity text,
              FOREIGN KEY (reviewer_screen_name,
                           reviewer_identity)
                          REFERENCES reviewer
                                     (screen_name,
                                      identity));

Обратите внимание, что ограничение внешнего ключа, в отличие от ограничения первичного ключа, не ' t неявно установить уникальное ограничение. Если вы тоже хотите уникальности, вам придется определить другое ограничение для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...