繁体   English   中英

sql 3NF规范化

[英]sql 3NF Normalization

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)
);

如果不能再次复制所有内容,则包含3NF。 确保没有重复的数据了

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM