为什么这个 table 不是第一范式

why this table is not in 1st normal form

假设我给出了以下 table 并且我试图确定它是否在 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

我已经应用了以下规则并且都满足了那么为什么 table 不在 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  

table 是 1NF 中的 ,因为每个关系由一组行组成,每个属性具有唯一的 "atomic" 值在 1NF 中,例如参见 [​​=10=] 中的定义。

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

第一范式关注的是数据结构,而不是数据本身。根据四个样本记录,我们无法告诉您您的 table 是否满足 1NF。

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

这实际上取决于应该如何解释第二行中的空白字段。如果这是来自练习,我会说它在没有进一步上下文的情况下非常模棱两可。

如果空白字段应该表示不同数据库行中的空值或空字符串,那么 table 确实在 1NF 中。但是,如果布局应该表示包含 嵌套 table(也称为重复组)的 table,则它不在 1NF 中。这种“重复”组在层次数据库中是允许的,但在关系数据库中是不允许或不支持的。

鉴于 mem_id 可能是主键,我 猜测 它是用来表示嵌套的 table,因此不在1NF.

要将其纳入 1NF,您必须将其分成两个 table 并通过外键连接:

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

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

顺便说一句,您列表中只有条件 1 是关于 1NF 的。条件 2-4 是关系的定义,因此也适用于不在 1NF 中的关系。