假设我们有以下实体:钻石模式:如何规范化?
- 制作工作室
- 记者
- 摄像机操作
- 新闻素材
在这个简单的世界,制作工作室有很多记者和许多相机操作员。每位记者都属于一个工作室。运营商也是如此。新闻片段是由一名记者和一名运营商制作的,这两名记者都来自同一工作室。
这里是我的幼稚的方法来把这个模型到关系数据库:
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