这是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)
);
有帮助吗?

解决方案

它看起来很好。我看不到任何归一化问题。然而:

  • 电影和导演表是两次创建的。
  • 流派表不用于任何东西(大概应该在电影中)。
  • 与Studios一样。
  • 当前的安排只允许每个工作室一名主任。这可能是a)每个导演一个工作室(向董事添加Studio_ID列)或更可能的b)Studio和Director之间的多对多关系(添加New Studio_directors Table)。
  • 当前的安排不是电影的副主任。
  • 您可能会考虑将导演和电影启动结合在一起,成为一张名为“人才”的桌子。您有数据重复,其中恒星也是导演。这是您设计的最大规范化问题。

其他提示

如果一切都无法再次复制,则将其包含在3NF中。确保不再有重复的数据

它有E PK,因此在1NF中。它的PK不是复合材料,因此在2NF中。所有的列除了钥匙之外什么都没有取决于3NF。除了PK以外,没有其他钥匙,所以它在BCNF中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top