为什么这张桌子不是第1范式

时间:2016-08-17 22:15:29

标签: database database-design database-normalization

假设我已经给出了下表,我试图确定它是否在1NF。

Table:
Mem_id mem_name phone email Book_num Book_titl Author_nam publication edition
100     smith    12443 eml1    200     physics   john         MACGROW   1ST
                               201     math      martin       MACGROW   2ND
101     hena     1020  eml2    200     physics   john         MACGROW   2ND 
102     moon     2020  eml3    204     new java  korth        ALPHA     4TH

我已经应用了以下规则并且它们都满足了为什么表不在1NF中?

我的适用条件:

1.values of each attribute is atomic/ Only one value per column
2.no two rows are identical 
3.every column has unique name
4.all entries in any column must be same type  

3 个答案:

答案 0 :(得分:3)

在1NF中是,因为每个属性由一组具有唯一“原子”值的行组成的每个关系都在1NF中,例如参见wikipedia中的定义。

实际上,1NF只具有历史意义,因为它现在被认为是关系模型定义的一部分。

答案 1 :(得分:3)

第一范式涉及数据结构,而不是数据本身。基于四个样本记录,我们无法告诉您表是否满足1NF。

您的表是否具有键,命名和类型属性,每个元组中每个属性只允许一个值,没有空值或其他“特殊”数据,没有列排序或元组排序?如果对所有这些事情都是肯定的,那么它就有资格成为一个合适的关系表并满足1NF的要求。

答案 2 :(得分:0)

看起来第一行(mem_id = 100)从book_numeditionBook_num 200201)。这意味着我们在一行中有一个重复组,这违反了第一范式。您不能直接在关系数据库中表示这样的表。您必须将其拆分为两个表并通过外键连接:

Mem_id mem_name phone  email 
100     smith    12443 eml1           
101     hena     1020  eml2    
102     moon     2020  eml3    

Book_num Book_titl Author_nam publication edition Mem_id 
200      physics   john         MACGROW   1ST     100
201      math      martin       MACGROW   2ND     100
200      physics   john         MACGROW   2ND     101
204      new java  korth        ALPHA     4TH     102

注意我在第二个表中添加了一个外键列 Mem_id