假設我們有以下實體:鑽石模式:如何規範化?
- 製作工作室
- 記者
- 攝像機操作
- 新聞素材
在這個簡單的世界,製作工作室有很多記者和許多相機操作員。每位記者都屬於一個工作室。運營商也是如此。新聞片段是由一名記者和一名運營商製作的,這兩名記者都來自同一工作室。
這裏是我的幼稚的方法來把這個模型到關係數據庫:
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和幾個問題。
問題是,新聞片段可以將來自不同製作室的攝影師與記者聯繫在一起。我知道這可以通過編寫相應的約束條件來解決,但爲了實驗的目的,我們假裝我們在Normal Form數據庫設計中進行了練習。
第一個問題是關於術語:是否正確地聲明這個模式是非規範化的?如果是的話,哪種正常形式會破壞?或者是否有這個異常的更好名稱,如記錄間冗餘,多路徑關係等?
如何更改此模式以使描述的異常不可能?
當然,我非常感謝參考論文解決這個特定問題。
你正在創造完美點。事實上,我錯過了人和他/她的角色。 – 2012-02-23 20:33:51
你在說得很完美,謝謝。事實上,我錯過了人和他/她的角色。但現在,記者屬於一個工作室的唯一方法是與操作員組成一個團隊。假設記者(和運營商)受制於工作室(在我的例子中,由FK表示)。鑑於這個新的模式,我如何找到哪些記者被特定工作室聘用? – 2012-02-23 20:47:36
@SergeBalyuk:看到我修正的答案。 – 2012-02-23 21:11:57