归一化为3NF?

时间:2014-12-04 01:21:50

标签: mysql sql

我必须将此表规范化至少3NF

  

customerID | customerName | petID | petName | transID | transName | transDetails |价

与FD如下

  

customerID - > {customerName,petID}

     

petID - > {petName,transID}

     

transID - > {transName,transDetails,Price}

现在我对此的回答是:

  

customer(customerID,customerName)// customerID as PK

     

pet(petID,petName,customerID)// petID为PK,customerID为FK

     

交易(transID,transName,transDetails,Price,petID)// transID为PK,petID为FK

我真的不太了解它,因为我现在无法吸收这些信息,因为我的大脑现在是来自大学的纸浆:(我是对的吗?

我非常仔细地看着FD,如果实际的3NF是:

  宠物(petID,petName,transID)

     

客户(customerID,customerName,petID)

     

交易(transID,transName,transDetails,Price)

1 个答案:

答案 0 :(得分:0)

目前尚不清楚顾客与宠物之间的关系是什么。从功能依赖性来看,所有三个实体都是1:1相关的,这意味着只要外键也是唯一的(防止1:N),你的第一个答案就可以工作。

第二个答案满足3NF的所有三个要求

  • 每个字段在功能上都取决于键
  • 整个密钥(无复合密钥)
  • 除了密钥(没有候选密钥)之外别无其他

但我会将外键远离宠物或顾客桌。每个都可以独立存在,我们希望避免外键列中的空值。外键属于事务表,因为事务是将宠物链接到客户的,无论所需的基数如何。