数据库三范式是什么?

哎,说到数据库模型,还得从我在论坛上遇到的一个具体案例说起。
当时有一个朋友在做一个电商网站,数据表非常乱。
结果,一旦出现问题,事情就会变得一团糟。

我们先来谈谈第一范式。
这就像数据库中的每一列都必须是纯数据项,不能有多个值。
我看着他的表,发现有些列实际上包含重复的信息,这显然违反了第一范式。
例如,在客户信息面板中,客户的电话号码重复多次,这显然是不可接受的。

说到第二个模型,这个模型更加具体。
它要求表中的数据必须完全依赖于主键,不能部分依赖。
我朋友的桌子上有一张点餐桌。
订单详情中的产品价格仅取决于订单号,而不取决于整个订单记录。
这就造成了部分依赖的谬误。

最终模型是第三个更高级的模型。
它要求每个非关键字列仅依赖于主键,而不能依赖于其他非关键字列。
在我朋友的表中,订单详情中的产品价格取决于产品ID,这形成了传递依赖,违反了第三种模式。

说白了,数据库模型就像编程中的代码规范。
如果不规范,出现问题时就会让你头疼。
我当时还给他写了一个优化方案,让他重新设计数据库表结构,就解决了问题。
在这方面,我错过了X周围的数据,但我建议你检查一下。
不管怎样,在数据库设计的时候,一定要讲究方法,不能乱七八糟。

数据库三大范式是什么

上周我们讨论了数据库规则。

第一范式(1 NF)。
列不能拆分。
例如,您不能将订单表中的地址拆分为两列:州和城市。
2 02 3 年学的。
我记得很清楚。

第二范式(2 NF)。
必须满足 1 NF。
非主键列。
您不能仅依赖主键的一部分。
例如,学号(主键)和姓名。
您不能仅根据学生证号码的一部分来决定姓名。
部分依赖不起作用。
我忘记了大约一半。

第三范式(3 NF)。
必须满足2 NF。
非主键列。
我们不能互相依赖。
例如,课程编号 -> 课程名称。
课程名称不能依赖于课程编号。
它应该直接依赖于主键。
传递依赖不起作用。
我不确定这部分。

数据库管理系统。
核。
管理您的数据库。
创建一个表。
查看、更改或删除。
管理用户和权限。

安全很重要。
保护方法: 1 、请使用原系统。
2 . 正确管理您的用户。
3 . 最小化特权。
4 . 更改端口。
5 .敏感数据加密。
6 . 创建备份。
7 . 管理存储过程。
8 . 开启审核。

这取决于你。

数据库三范式的具体含

哦,你这样说听起来很学术。
但说实话,最近在帮朋友调试数据库的过程中,我意识到这些理论不仅仅是装饰性的。
我会告诉你我所理解的。

上周,一位客户问我为什么我的系统查询这么慢。
我注意到表格设计没有遵循三种范式。
例如,我有一个订单表。
主键是订单号。
因此,地址信息分为三列:州、城市和地区。
这也与使用客户 ID 的客户表相关联。
想一想。
每次我检查订单时,我都必须加入表格。
数据是冗余的。

首先我们来谈谈最基本的形式,第一范式(1 NF)。
2 02 3 年,我记得在上海的一个购物中心项目中遇到了一个陷阱。
当时我们有一个员工表,实际上同一列中写了多个技能,用逗号分隔,这破坏了查询效率。
后来改为每个技能都有一个单独的栏。
这与1 NF一致,必须保证数据的原子性。
你想一想,能分就分吧。
您不能在一栏中放入太多内容。

接下来,我们有第二范式(2 NF),它与主键密切相关。
在我自己搭建的杭州电商系统中,订单表原本是使用订单号作为主键的。
因此,地址信息仍然依赖于订单号,但地址本身是一个全局概念,与订单号没有直接的一对一关系。
然后我们将其拆分为符合 2 NF 的订单表和订单地址表。
消除部分依赖意味着只有部分主键无法确定其他列。

最后,第三范式(3 NF)有更严格的要求。
我在深圳一家公司帮助建立会员计划时遇到了这个问题。
我也是直接将用户地址输入到users表中,但是后来发现地址变了,每次变都得修改user表,导致数据严重不一致。
后来修改为使用外键与独立地址表关联,使其符合 3 NF。
非主键列必须直接依赖于主键,中间商无法从差异中赚钱。

无论如何,我不认为这三种范式只是理论的理论。
在你实际使用之前你不会明白它有多好。
当我们从事一个新项目时,我们必须在设计表结构之前考虑这些范式,否则以后更改它会很痛苦。
然而,话虽如此,有时您需要适当地休息才能获得性能。
例如,在大数据场景中,完全标准化速度很慢,因此需要权衡。