Предположим, у нас есть следующие сущности:
В этом простом мире продюсерская студия имеет много журналистов и много камер операторы. Каждый журналист принадлежит ровно одной студии. То же самое и с операторами. Новостные кадры производятся одним журналистом и одним оператором, причем оба из одной студии.
Вот мой наивный подход к помещению этой модели в реляционную базу данных:
CREATE TABLE production_studios(
id SERIAL PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE journalists(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
prodution_studio_id INTEGER NOT NULL REFERENCES production_studios
);
CREATE TABLE camera_operators(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
production_studio_id INTEGER NOT NULL REFERENCES production_studios
);
CREATE TABLE news_footages(
id SERIAL PRIMARY KEY,
description TEXT NOT NULL,
journalist_id INTEGER NOT NULL REFERENCES journalists,
camera_operator_id INTEGER NOT NULL REFERENCES camera_operators
);
Эта схема формирует красивый ромбовидный ERD и несколько вопросов.
Проблема в том, что кадры новостей могут связать журналиста с оператором, которые поступают из разных студий. Я понимаю, что это можно исправить, написав соответствующие ограничения, но ради эксперимента давайте представим, что мы выполняем упражнения по проектированию базы данных в нормальной форме.
Первый вопрос касается терминологии: правильно ли утверждать, что эта схема денормализована? Если да, то какую нормальную форму он нарушает? Или есть какое-нибудь лучшее название для этой аномалии, например, избыточность между записями, многопутевые отношения и т. Д.?
Как можно изменить эту схему, чтобы описанная аномалия стала невозможной?
И, конечно, я был бы очень признателен за ссылки на документы, посвященные этой конкретной проблеме.