Хранение внешнего ключа, связанного в отдельной таблице? SQL - PullRequest
0 голосов
/ 18 июня 2020

Итак, я прошел через дизайн базы данных Odoo и увидел, что они сохранили отношения между двумя таблицами в отдельной таблице, у которой нет первичного ключа. Как тебе это удается? Я хочу воспроизвести такое поведение на сервере SQL. Он вставляется автоматически?

1 Ответ

0 голосов
/ 18 июня 2020

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

Обычно вы моделируете отношения m-to-n между таблицами с отдельной таблицей, которая имеет внешние ключи для обеих таблицы:

CREATE TABLE person (
   person_id bigint PRIMARY KEY,
   name text,
   ...
);

CREATE TABLE game (
   game_id bigint PRIMARY KEY,
   name text NOT NULL,
   ...
);

CREATE TABLE likes_to_play (
   person_id bigint REFERENCES person NOT NULL,
   game_id   bigint REFERENCES game   NOT NULL,
   PRIMARY KEY (person_id, game_id)
);

CREATE INDEX ON likes_to_play (game_id);

Первичный ключ в таблице гарантирует отсутствие лишних двойных записей и поддерживает один из внешних ключей. Другой индекс создается для другого внешнего ключа.

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