为什么这个 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 中的关系。
假设我给出了以下 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 中的关系。