假设我已经给出了下表,我试图确定它是否在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
答案 0 :(得分:3)
表在1NF中是,因为每个属性由一组具有唯一“原子”值的行组成的每个关系都在1NF中,例如参见wikipedia中的定义。
实际上,1NF只具有历史意义,因为它现在被认为是关系模型定义的一部分。
答案 1 :(得分:3)
第一范式涉及数据结构,而不是数据本身。基于四个样本记录,我们无法告诉您表是否满足1NF。
您的表是否具有键,命名和类型属性,每个元组中每个属性只允许一个值,没有空值或其他“特殊”数据,没有列排序或元组排序?如果对所有这些事情都是肯定的,那么它就有资格成为一个合适的关系表并满足1NF的要求。
答案 2 :(得分:0)
看起来第一行(mem_id
= 100
)从book_num
到edition
(Book_num
200
和 201
)。这意味着我们在一行中有一个重复组,这违反了第一范式。您不能直接在关系数据库中表示这样的表。您必须将其拆分为两个表并通过外键连接:
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
。