Алмазная схема: насколько это (де) нормализовано?

Предположим, у нас есть следующие сущности:

  • Продакшн-студия
  • Журналист
  • Оператор
  • Новостные кадры

В этом простом мире продюсерская студия имеет много журналистов и много камер операторы. Каждый журналист принадлежит ровно одной студии. То же самое и с операторами. Новостные кадры производятся одним журналистом и одним оператором, причем оба из одной студии.

Вот мой наивный подход к помещению этой модели в реляционную базу данных:

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 и несколько вопросов.

Проблема в том, что кадры новостей могут связать журналиста с оператором, которые поступают из разных студий. Я понимаю, что это можно исправить, написав соответствующие ограничения, но ради эксперимента давайте представим, что мы выполняем упражнения по проектированию базы данных в нормальной форме.

  1. Первый вопрос касается терминологии: правильно ли утверждать, что эта схема денормализована? Если да, то какую нормальную форму он нарушает? Или есть какое-нибудь лучшее название для этой аномалии, например, избыточность между записями, многопутевые отношения и т. Д.?

  2. Как можно изменить эту схему, чтобы описанная аномалия стала невозможной?

И, конечно, я был бы очень признателен за ссылки на документы, посвященные этой конкретной проблеме.

10
задан Serge Balyuk 23 February 2012 в 18:49
поделиться