【问题标题】:sql 3NF Normalizationsql 3NF 规范化
【发布时间】:2011-04-25 07:29:07
【问题描述】:

这是在 3NF 中吗?

create table movies( 
  id numeric primary key not null default autoincrement,
  name varchar(50) not null, 
  release-date Date, 
  price numeric, 
  rating numeric,
  length numeric,
  description varchar(1500)
);

create table movies( 
  id numeric primary key, 
  name varchar(20) 
);

create table genre(
  name varchar(20) primary key
);

create table directors(
  id numeric primary key not null default autoincrement, 
  first-name varchar(32) not null, 
  last-name varchar(32) not null, 
  gender varchar(8), 
  dob Date, 
  biography varchar(1000)
);

create table movie-Star(
  id numeric primary key not null default autoincrement, 
  first-name varchar(20) not null, 
  last-name varchar(20) not null,
  gender varchar(8), 
  dob Date, 
  hometown varchar(20)
);

create table movies-cast(
  movie-id numeric references movies(id), 
  actor-id numeric references movie-Star(id), 
  role varchar(32), 
  primary key (movie-id, actor-id)
);

Create table Studio( 
  studio-id numeric references directors(id)
  Directer-name varchar(20) not null
  name varchar(20) primary key
);

create table directors(
  id numeric primary key not null default autoincrement, 
  first-name varchar(32) not null, 
  last-name varchar(32) not null, 
  gender varchar(8), 
  dob Date, 
  biography varchar(1000)
);

【问题讨论】:

  • 我认为普通形式描述了多个表如何相互关联以及如何实现多值字段。你还有什么其他的桌子?
  • 这里是我的其他表
  • 只是一个建议,创建一个艺术家和角色的单一表,如艺术家、导演等。然后创建一个艺术家角色的映射表,并将您的电影与这个映射 id 映射到另一个映射表movie-cast .

标签: sql mysql normalization 3nf


【解决方案1】:

它看起来结构很好。我没有看到任何规范化问题。然而:

  • Movies 和 Director 表会创建两次。
  • 流派表不用于任何事情(大概应该在电影中)。
  • 与工作室相同。
  • 目前的安排是每个工作室只允许一名导演。这可能应该是 A) 每位导演一个工作室(将 studio_id 列添加到 director)或更可能 B)工作室和导演之间的多对多关系(添加新的 studio_directors 表)。
  • 目前的安排并未将导演与电影相关联。
  • 您可以考虑将 Director 和 Movie-Start 合并到一个名为 Talent 的表中。您有数据重复,其中明星也是导演。这是您设计中最大的标准化问题。

【讨论】:

    【解决方案2】:

    如果所有都不能再次复制,则包含 3NF。 确保不再有重复数据

    【讨论】:

      【解决方案3】:

      它有e PK,所以它在1NF。它的PK不是复合的,所以它在2NF中。所有的列都依赖于键,所以它在 3NF 中。除了PK,没有其他键,所以在BCNF中。

      【讨论】:

        猜你喜欢
        • 2016-01-01
        • 2012-03-31
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 2014-09-23
        • 2014-09-22
        • 2014-07-09
        • 1970-01-01
        相关资源
        最近更新 更多