Связь разных полей с разными таблицами sql

Есть 3 таблицы (упрощены для промера)

1 images

id | автор

2 authors

id | имя_автора

3 studio

id | имя_студии

у фото автором может быть или мужик из таблицы "authors", или студия из таблицы "studio". Попытка 1: Нам бы привязать колонку "автор" к 2-м таблицам сразу (authors и studio) Результат: Технически невозможно

Попытка 2: Создать представление authors + studio и уже его привязать к колонке автор. Результат: Технически невозможно делать связи с представлениями

Попытка 3: Добавить связывающую таблицу

image_id | в_какой_таблице_автор | автор_id
1        | studio                | 126

Результат: В колонке "в_какой_таблице_автор" может быть разные таблицы, как их связать с этими таблицами? (аля foreign key)

Вообще, разве редкая задача привязать несколько таблиц к одному полю, с потребностью целостности данных БД? как это сделать?


Ответы (1 шт):

Автор решения: Akina
CREATE TABLE images (
    id SERIAL PRIMARY KEY,
    author_id INT, 
    studio_id INT,
    FOREIGN KEY (author_id) REFERENCES author (id),
    FOREIGN KEY (studio_id) REFERENCES studio (id),
    CHECK ((author_id IS NULL + studio_id IS NULL) = 1)
);

Два поля для связывания. Из них только одно содержит значение.

→ Ссылка