SQL3NF规范化

SQL3NF规范化,sql,mysql,normalization,3nf,Sql,Mysql,Normalization,3nf,这是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( i

这是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)每个导演一个工作室(向导演添加工作室id列),或者更可能是B)工作室和导演之间的多对多关系(添加新的工作室导演表)
  • 当前安排不将导演与电影关联
  • 你可以考虑把导演和电影开始组合成一张名为Talent的桌子。您有一个数据复制,其中一个star同时也是一个控制器。这是设计中最大的规范化问题
我认为范式描述了多个表如何相互关联以及如何实现多值字段。你还有什么其他的表?这里是我的其他表只是一个建议,创建一个艺术家和角色的表,比如艺术家、导演等。然后创建一个艺术家角色的映射表,并在另一个映射表movie cast中用这个映射id映射你的电影。