0

我正在尝试使这种关系正常化:

film_year  film_name  critic_id critic_name cinemas_debut           score
     2004  I robot          111        John  NY_cinema, LA_cinema       4 
     2004  I robot          222     Mathiew  NY_cinema, LA_cinema       5

在哪里 ...

  • film_year 和 film_name 标识电影。
  • Cinemas_debut 是一个多值属性。
  • 批评者 ID -> 批评者姓名
  • 电影年、电影名、影评人 ID -> 得分

我无法转换与 3FN 的关系。这是我尝试过的:

  • 步骤1

到 1NF:没有重复的元素或元素组:

film_year  film_name  critic_id critic_name cinemas_debut           score
     2004  I robot          111        John  NY_cinema                  4 
     2004  I robot          222     Mathiew  LA_cinema                  5
     2004  I robot          111        John  NY_cinema                  4 
     2004  I robot          222     Mathiew  LA_cinema                  5
  • 第2步

到 2NF:对连接键没有部分依赖:我把它当作 PK film_year, film_name, critic_id, cinemas_debut。然后critic_namescoreara 部分依赖项,我将这些属性与其行列式的副本脱离关系:

 critics ( critic_id (pk), critic_name )
 reviews(film_year (pk), film_name (pk), critic_id (pk), score)

但我不知道如何处理结果关系:

film_year  film_name  critic_id cinemas_debut          
     2004  I robot          111    NY_cinema                   
     2004  I robot          222    LA_cinema                  
     2004  I robot          111    NY_cinema                   
     2004  I robot          222    LA_cinema                 

目前我不知道如何对这个结果关系应用归一化。我正在寻找的是逐步规范化。我不需要最终结果。我不想学习规范化规则,因为我需要一步一步的表格规范化。

4

1 回答 1

1

这将是您的 3NF,但是我没有测试约束。

电影(名称,年份)
PK >(姓名、年份)

评论家(身份证,姓名)
PK > 身份证

film_critic (film_name, film_year,critic_id, score)
PK > (film_name, film_year,critic_id)
FK > (film_name, film_year) &critic_id

电影院(名称)
PK > 名称

film_cinema(电影名称、电影年份、电影名称)
PK >(电影名称、电影年份、电影名称)
FK > (film_name, film_year) & 电影名称

使用代理键而不是引用电影名称和年份(对于电影也是如此)会更容易。

电影(身份证、姓名、年份)
PK > 身份证

评论家(身份证,姓名)
PK > 身份证

film_critic (film_id,critic_id, score)
PK > (film_id, critic_id)
FK > film_id & critic_id

cinema (id, name)
PK > id

film_cinema (film_id, cinema_id)
PK > (film_id, cinema_id)
FK > film_id & cinema_id
于 2012-12-03T15:39:44.790 回答