【发布时间】:2012-03-14 05:24:24
【问题描述】:
假设我们有以下实体:
- 制作工作室
- 记者
- 相机操作员
- 新闻片段
在这个简单的世界里,制作工作室有很多记者和摄像师。每个记者都属于一个工作室。运营商也是如此。新闻片段由一名记者和一名操作员制作,他们都来自同一个工作室。
这是我将此模型放入关系数据库的幼稚方法:
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 和一些问题。
问题在于,新闻片段可以将来自不同制作工作室的记者与摄影师联系在一起。我知道这可以通过编写相应的约束来解决,但是为了实验,我们假设我们正在做范式数据库设计的练习。
第一个问题是关于术语的:声明这个模式是非规范化的是否正确?如果是,它打破了哪种范式?或者这种异常有什么更好的名称,比如记录间冗余、多路径关系等?
如何更改此架构以使所描述的异常成为不可能?
当然,我非常感谢参考解决这个特定问题的论文。
【问题讨论】:
标签: sql database schema normalization