数据库的三范式是什么?

1 NF:每列仅存储单个值,例如将地址分为省份和城市。
2 NF:非主键完全依赖于主键,比如将学生选课表分成三张表。
3 NF:非主键不间接依赖于主键,例如对员工表和部门表进行分区。
权衡:避免过度概括、按需设计、ER 图等有用工具、测试性能。

数据库设计三大范式

三个主要模型是数据库设计的核心规则。
1 NF要求字段值不可整除。
例如,订单表将地址字段分为省、市、街道,以避免在一个字段中嵌入多个值。
2 NF 要求辅助键字段完全依赖于主键。
例如订单表,将产品信息划分为产品表,并链接到订单商品表,解决常见的主键依赖问题。
3 NF 要求字段不能过度依赖主键。
例如,orders表中只存储客户编号,customers表中放置客户和公司名称,防止客户信息随着订单而改变。
实际用例:电商订购系统将产品表按 2 NF 划分(项目 2 02 0),减少了 3 0% 的查询冗余。
不确定2 NF在常见主键场景下的优先级。
称一下体重。

数据库的三大范式?

哎,你说这个数据库范式让我第一次接触的时候很头疼。
听我讲述我所遇到的困难。

我们先来谈谈范式(1 NF)。
简单来说,每一列都必须是一个完整的、不可分割的数据项。
您不能在一列中混合多个值,这绝对是不可能的。
我记得有一年我正在为一家小公司开发客户管理系统。
起初我非常兴奋,我把客户的姓名和电话号码放在一栏中,用逗号分隔。
后来我发现并不起作用。
如果我想查看某个订阅者是否只创建了某个电话号码,或者如果我想修改该电话号码,我就必须更改整个列表,这非常麻烦。
后来我很快就改成单独一栏显示客户姓名,单独一栏显示电话号码,这样就好多了。
你看,这是 1 NF 文本,列不能有重复的属性,这应该是显而易见的。

第二范式(2 NF)基于 1 NF,并要求每一行被唯一标识。
这通常意味着添加主键。
例如,在员工信息表中,应该有员工编号(emp_id)什么的。
该号码必须是唯一的,以区分该员工与该员工。
我记得有一年我帮助一位朋友管理库存。
他的表中没有唯一的产品编号,因此为了区分它们,他值得信赖的产品名称。
你猜怎么着?两种不同的产品名称看上去有些相似,他一头雾水,在盘点时差点算错了库存。
因此,添加主键,例如自增ID,是有必要的。
如果主键是复合主键,还应该记住,非主属性不能只依赖主键的部分内容,否则很容易出现错误和数据重复。
我没遇到过多少,但理论上我理解。

第三范式(3 NF)更进一步,要求表不包含已经出现在其他表中的非关键字信息。
这是什么意思?只是避免过度。
例如,您有一个单独的表,其中包含员工编号、姓名和部门编号;您有一个包含部门编号和部门名称的部门表。
那么在员工表中,应该存储的不是部门名称,而是部门编号。
因为部门名称已经在 Departments 表中,所以Employees 表只需要知道它是哪个部门编号。
您可以使用此编号转至“部门”表来查找部门名称。
我记得有一年我正在开发项目管理系统。
如果我将项目经理的姓名直接存储在任务列表中,那么如果项目经理更换工作,则所有任务列表都必须更改。
这很烦人。
后来我就改了。
项目经理的号码存储在任务表中,姓名存储在员工表中。
通过号码找到的。
这样,如果项目经理更换工作,只需要改变员工名单,而不需要改变工作清单。
这就是3 NF的优点,减少冗余,保证数据一致性。

总的来说,这三种模式会让你的数据库表设计一步步变得越来越合理,减少数据冗余,保证数据的一致性和完整性。
不要低估它。
一开始我并不明白这一点。
数据库混乱,数据不匹配。
实在是太麻烦了。
现在想来,我还是要好好学习,不要像当年那样陷入困境。

数据库设计三大范式

当谈到数据库设计时,这三种范式实际上是陈词滥调。
说实话,刚进入这个行业的时候我很困惑,但后来我逐渐明白了其中的奥妙。

简单来说,第一范式保证数据库表中的每一列都是最基本的单位,不能包含复合数据。
例如,曾经有一个表,其中有一个“地址”字段,其中包含国家、省、市、区、街道等信息。
这不符合 1 NF。
需要将其分解为“国家”、“省”、“市”、“区”、“街道”五个字段,这样每个字段的数据就不能再细分了,对应的是1 NF。

第二个范式更加具体。
它要求除了主键之外,其他列只能依赖于主键,而不能依赖于主键的特定部分。
例如,订单明细表包含订单名称、订单类型和订单号。
如果订单名称和类型仅取决于订单号的一部分(例如年份),则不符合 2 NF。
您需要将这部分拆分到一个新表中,以便每个非主键列仅依赖于主键,这是符合 2 NF 的。

第三范式是最先进的。
它要求每个表列只能直接依赖于主键,不能有传递依赖。
例如,产品表包含产品编号、产品名称、产品特性、单价和产品类型。
如果产品的特性取决于产品的类型,则违反了 3 NF。
您需要将产品特性和单价放入一个新表中,以便每个非主键列都直接依赖于主键,这符合 3 NF。

遵循这三个范式,数据库结构就会清晰,数据一致性和管理效率都可以提高。
但说实话,我当时并不理解。
后来,经过更多的实践,我逐渐明白了。
总之,数据库设计要讲究方法,您无法一次累积所有数据。