Cel*_*tas 6 normalization relational-theory
我在 SO 上问了一个类似的问题,并被建议在这里问问题类型。这是关于关系数据库的课程。一个示例问题询问“为什么关系数据库中的每个表都应该是第一范式”我的第一个问题是不是 3NF 被认为更好,所以该语句不会是错误的吗?我的第二个问题是关于 SO 人们说第一范式很好,因为它消除了冗余。我不知道它是如何做到这一点的,因为 1) 所有值都是原子的 2) 有一个主键 - 这两个都没有消除冗余。
我想另一种问法是为什么值是原子的很重要?
第一范式的主要重要性不在于它消除了冗余,而在于它消除了重复组。
不是在记录中包含多列相同类型的数据,而是 (0NF) 将重复的信息删除到一个单独的关系中,并将它们表示为行。这就是1NF的构成。
有列的表,如:phone_1
,phone_2
,phone_3
或含有类似面向列表的数据:212-555-1212, 212-555-1234, 416-967-1111
违反1NF。
1NF 很重要,因为它比 0NF 灵活得多,同时在插入、更新和读取数据时更容易使用。这是因为每种类型的数据元素(例如客户电话号码)都只有一列可以找到它,而该列对于每条记录只有一个数据。这意味着您可以使用简单的 SQL 语句来读取或写入单个数据元素,而无需解析分隔字符串或使用诸如:where phone_1=@Number or phone_2=@Number or phone_3=@Number
等结构。
关于 1NF 与 3NF,范式是累积的。3NF 中的表也是 1NF 中的,因此说“关系数据库中的每个表都应该在 1NF 中”与说“关系数据库中的每个表都应该在 3NF 中”一样正确。我会说这两个都是真的,但我会补充说“除非你有一个非常好的、经过深思熟虑的去规范化的理由”。