什么是数据库的范式?请简要解释第一范式和第二范式

2 02 3 年,我的朋友正在研究数据库设计,他刚刚提到了数据库范式。
说到这里,范式非常重要,就像盖大楼之前先打好地基一样。

上周,他向我解释了第一范式(1 NF),这意味着每一列只能是原子数据单元,不能有多个值。
例如,联系信息栏不能同时包含电话号码和电子邮件地址,它们必须分开。

然后他谈到了更严格的第二范式(2 NF)。
不仅应该是原子数据,还应该是完全依赖主键的非主属性。
这意味着如果主键是多个字段的组合,则非主属性必须同时依赖于这些字段,而不仅仅是其中之一。

朋友说1 NF和2 NF就像数据库设计的基础,可以减少数据冗余,保证数据的一致性和完整性。
后面的范式会在此基础上继续优化,但是1 NF和2 NF已经可以解决很多基本模型了。

但是,我刚刚想到的另一件事是,在实际实施中,这些范式有时需要适应具体情况。
这个就看你自己的想法了,数据库设计相当复杂。

数据库三范式

坦率地说,三种数据库范式是关系数据库设计的基础。
它就像一套规则,保证数据库中的数据不冗余、不倾斜。
其实很简单。
三种范式是 1 NF、2 NF 和 3 NF。
每个级别都在前一个级别的基础上变得更加严格。

我们先来说说最重要的事情。
1 NF 要求表中的每一列都是不可分割的原子数据项。
这意味着不能有重复的属性或多个值。
例如,学生表不能直接存储包含州、城市和区的地址。
它应该分为单独的列或单独的表。
我们去年跑的项目没有遵循1 NF,所以维护数据特别困难。

还有一点是2 NF是在1 NF的基础上,要求非主键字段完全依赖于主键。
例如,订单明细表的主键是订单 ID 和产品 ID,但产品名称和单价仅取决于产品 ID,因此不符合 2 NF。
因此,您需要对表进行分区以消除这种部分依赖性。

还有另一个重要的细节。
3 NF在2 NF的基础上进一步消除了非主键字段之间的传递依赖。
例如,students表中的系地址不能只依赖于系名,形成传递依赖。
我需要对表进行分区,以便主键以外的每个字段都直接依赖于主键。

起初我认为遵循这些范式就足够了,但后来我意识到我错了。
过度规范化可能会导致查询性能不佳。
等等,还有一件事。
虽然3 NF可以减少数据冗余和更新异常,但高并发场景可能需要适当的反规范化来提高性能。

那么我的建议是,在实际应用中,应该根据具体情况灵活使用这三种范式,既要保证数据完整性,又要考虑查询效率。
你怎么认为?您是否遇到过因不遵循三个范式而导致的问题?

什么是数据库三范式的通俗讲解

上周我的朋友研究了数据库设计并提到了三个主要范例。
他说,就像建造房子有规则一样,数据库设计也必须遵循规则才能高效且不太可能出现问题。

例如,表格中的地址字段给出了示例:“广东省广州市天河区”。
地址中的州 它与第一个主题不匹配,因为它包括城市和县。
该信息可以分为单独的字段。

然后,为了方便起见,地址是“县表”。
他表示,可以分为“城市表”和“具体地址表”。
每个表只负责存储一层数据,避免重复数据。

然后我想到了别的事情。
他说,第三范式意味着表中的数据不应相互依赖,而是与主键直接相关。
例如学生表中的学生ID;部门表包含部门ID、部门名称和部门名称。
包含系名称和系主任 ID。
这样,系名称和系主任 ID 直接依赖于系 ID,避免了学生表中数据的重复。

这三种范式就像数据库设计的指南针,可以帮助你构建一个高效且可维护的系统,他说。
然而,有时设计起来非常困难,但为了数据质量。
还是值得的。
要知道,他认为这个案子非常重要。

数据库三范式是什么

是的,我向正确的人询问了数据库的三种范式。
我不明白什么时候该使用我踩过的深渊。

我告诉你,Egard Kod在1 9 7 0年提出的时候,主要是想解决数据冗余问题,让数据库更加稳定,提高数据一致性。
核心由三个层次组成:
第一范式(1 NF):这是最基本的;每个字段必须是最小单位,并且不能被分割。
正如你所说,“地址”栏与州和城市一起放置,因此它是州,需要分为三栏:城市和县。
在我将地址放入专栏之前,有一个项目。
当被问及时,它引起了各种各样的问题。
这个1 NF做得不好。

第二范式(2 NF):在1 NF的基础上,非主键字段必须完全依赖于主键,而不能仅依赖于主键的部分。
例如,订单表中的主键是(订单id,产品id)。
那么“产品价格”不仅可以查看产品ID,还可以查看完整的订单信息。
当时我在上海做一个电子商务系统,产品价格与产品ID挂钩。
因此,修改产品订单时,价格不会改变。
因为2 NF效果不好。

第三范式(3 NF):基于2 NF的非主键字段不能互相依赖。
例如,如果您提供的大学地址取决于大学名称;这不起作用。
上次帮朋友查了一下旧系统,发现“学生表”中的“学院名称”依赖于“学院ID”,“学院地址”依赖于“学院名称”。
这种传递依赖会直接弄乱数据并最终破坏表。

三种范式有很多优点:节省存储空间;查询速度快,易于更新和维护。
但缺点也很明显。
你是绝对正确的。
有时是为了表演;需要减少反规范化,表集和关系查询速度慢。
上次我们构建实时报告系统时,我们遵循了三种范例。
这样一来,每次查数据时,都需要对N张表进行Join。
它是如此封闭,以至于我只能添加一些我不再需要的数据。

因此,这件事绝对没有标准答案。
业务条件;森林面积有多大?并取决于是否有很多查询。
你可以自己掂量一下。
在简单系统中严格,但在复杂系统中不严格也可以。
无论如何,这取决于你。