@rodionov12

Как сделать foreign key в дочерней таблице до нескольких родительских?

У меня есть таблицы users и teams вида:

CREATE TABLE users(
  "guid" uuid NOT NULL DEFAULT uuid_generate_v4(),
  "username" varchar(60) NOT NULL
);


CREATE TABLE teams (
  "guid" uuid NOT NULL DEFAULT uuid_generate_v4(),
  "name" varchar(60) NOT NULL
);


и дочерняя таблица participants
CREATE TABLE participants (
  "contest" uuid NOT NULL,
  "participant" uuid NOT NULL,
);


Хочется сделать, чтобы в таблице participants столбец participant был foreign key одновременно на обе родительские таблицы. Объединять таблицы teams и users не вариант, другие столбцы в них разные, и логика сильно отличается.
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
В том смысле чтобы participants.contest проверял, что такой uuid есть в users.guid или teams.guid?
Нет, так нельзя.

Сделайте триггер который будет копировать логику FK.
Вынесите общие поля в отдельную таблицу, объединяйте как 1:1 с teams или users
Вынесите общие поля в отдельную таблицу, воспользуйтесь наследованием таблиц (inherits).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
TheRonCronix
@TheRonCronix
Вот именно teams and users это разные сущности и перемешивать их нельзя. Поэтому и нужно в таблице participants сделать два foreign key. Отдельно на users и отдельно на teams.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы