什么是三范式?

说白了,三重范式是数据库设计中的一个“魔咒”,它可以让你的表结构快速稳定。
其实很简单,就三部分:先来说说最重要的。
第一范式确保每个字段都是原子的且不可分割的。
去年我们跑一个电商项目的时候,发现用户地址写成“省-市-区-详细”就爆了,所以不得不分成四个区域。
另一个问题是第二范式使得非主键列完全依赖于主键。
例如Users表是通过“用户ID+订单ID”连接的,结合主键,查询时不能只找用户ID而漏掉订单ID。
很多人没有注意到这一点;还有一个非常重要的细节。
第三种模式禁止“循环依赖”。
例如,您不能让“订单金额”依赖于“订单产品列表”。
您需要先让“订单产品列表”计算出总金额,然后再填写。
说实话,这确实是一个陷阱。
去年整个网站几乎因此变慢。
起初,我认为第三范式越多越好。
但后来我知道这是错误的。
低于3 000的水平,可能没有影响。
提醒一下,不要拘泥于模式。
有时候为了性能你不得不“突破”一点,但你又得不知所措地知道该迈到哪里。

请结合实例简述进行适度关系型数据库规范化是为了解决关系型数据库的哪些问题?

上周,一位客户问我逻辑关系数据库设计的重要性,我向他解释了这一点。
首先,您需要知道从逻辑上设计关系数据库就像建造房屋一样。
地基必须打好,以确保房子坚固耐用。

让我举个例子。
我在2 02 3 年在上海的一个商场里看到了这样的一个例子,这个商场的数据库设计得很好。
各关系模型结构合理、功能简单清晰、标准化程度高。
这样数据冗余很少,数据共享性高,一致性好,使用特别流畅。

归一化理论是为了解决数据冗余、删除异常和插入异常问题而提出的。
简而言之,它通过打破关系模式来提高数据库的效率。
但分解方法并不唯一。
在分解后的数据库能够表达原始数据库中的所有信息的假设下,必须满足最小冗余要求。

我在公司做数据库优化的时候就已经遇到过这种情况。
有时故意保留一些冗余可以使数据更易于查询。
特别是对于更新频率较低、查询频率极高的数据库系统,这种设计更加实用。

但是,并非所有模式都需要 BCNF。
有时根据实际情况进行调整可以更好地满足应用要求。
无论如何,这取决于你,主要是根据实际情况设计数据库。
我还在想,看看有没有更好的办法。

数据结构中的1范式,2范式,3范式,bc范式,4范式,5范式。怎么理解?希望解释的直白些。

哈哈,我完全明白你在说什么,但是和你谈论这些概念对我来说有点困难。
看看我当时掉进的陷阱。
2 008 年,我在上海做一个项目,当时我陷入了困境。
数据库一片混乱。
数据表都是盲联的,查询起来能要人命。
例如,有一个“员工”表,其中员工 ID 为主键,那么员工姓名、部门名称、部门负责人 ID 都加载到同一个表中。
想象一下,该部门已更名,所有人事记录都必须更改。
我可以请谁来澄清这一点?
后来我强迫自己改变它,发现它没有任何作用。
如果必须分开部门建表,则员工表需要多个部门ID外键。
开发者每天抱怨查询需要三张表,SQL很长时间写不出来。
我只能刷牙,最后连去卫生间的速度都太慢了。
这是缺乏正态性的直接后果,随着数据大小的增加,数据大小会减小。

这并不意味着范例越大越好。
我在2 01 4 年做电子商务系统时,根据3 个参数准备了用户地址表,并将地址详细信息和送货单分成不同的表。
结果,客服不得不连续查三张表,才能核对用户更新后的地址。
最后,我添加了一个视图,供开发人员保存常用查询的结果。
这也算是一种妥协,至少主要工作进展顺利。

你提到的概念都是正确的。
我曾经遇到过BC范式,即订单表中的产品和规格被分成独立的列,并且必须在请求时使用SQL函数来计算聚合。
这导致编辑们每天都吵着要辞职。
但如果必须让所有表5 都遵循标准形式,维护成本会非常高。

简而言之,设计数据库就像做人一样。
如果你太实际,你就很容易陷入困境。
关键是根据实际需要,才可以用。
这些如果你记住了理论,当你将来实际使用它们时你就会知道该去哪里。