Имеет ли смысл когда-либо иметь более одного внешнего ключа между двумя таблицами? - PullRequest
0 голосов
/ 24 декабря 2018

Я изучал Sqlalchemy и заметил, что отношение внешнего ключа определялось связыванием имен таблиц без идентификации фактического внешнего ключа, соединяющего две таблицы, поэтому я подумал, если между двумя таблицами имеется более одного внешнего ключа (если это когда-либо имеет смысл), sqlalchemy не сможет определить ключ, используемый для связи двух таблиц.В любом случае, мой вопрос: имеет ли смысл когда-либо иметь более одного внешнего ключа между двумя таблицами

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

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

0 голосов
/ 24 декабря 2018

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

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

CREATE TABLE Bugs (
  bug_id INT PRIMARY KEY,
  reporter INT NOT NULL REFERENCES Users(user_id),
  assigned_to INT REFERENCES Users(user_id),
  verified_by INT REFERENCES Users(user_id),
  ...
);

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

Вот еще один пример: приложение доставки отслеживает каждую партию и записывает страну происхожденияи страна назначения.

CREATE TABLE Shipments (
  ...
  origin_country INT NOT NULL REFERENCES Countries(country_id),
  destination_country INT NOT NULL REFERENCES Countries(country_id),
  ...
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...