Связь разных полей с разными таблицами 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 шт):
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)
);
Два поля для связывания. Из них только одно содержит значение.