Задать вопрос
@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 не вариант, другие столбцы в них разные, и логика сильно отличается.
  • Вопрос задан
  • 187 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Инженер по тестированию
    5 месяцев
    Далее
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
Решения вопроса 1
Melkij
@Melkij
DBA для вашего PostgreSQL?
В том смысле чтобы participants.contest проверял, что такой uuid есть в users.guid или teams.guid?
Нет, так нельзя.

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

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

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