深入了解数据库设计的三范式

三种范式是一种强大的数据库设计工具,可以消除冗余并避免数据异常。
1 NF:拆分复合字段,例如B.“学校所在省、县”改为“省”、“区”。
2 NF:非主键完全基于主键,例如B. 拆分评级表以避免部分依赖。
3 NF:消除传递依赖,例如B. 拆分员工表,防止“部门经理”依赖“员工ID”。
优点:数据一致性、可维护性、查询性能。
建议:灵活应用、分步优化、工具支持。
你自己掂量一下吧。

数据库设计三大范式

等等,还有一件事。
昨天我在整理客户信息的时候发现了一个问题。
客户端表里有地址,一开始是连续写的。
后来,当他检查某个城市的所有客户时,他陷入了困境。
我们要分,分省、市、区。
这会很快。
这是第一个范式。
将大字符串拆分为较小的字符串可以加快搜索速度。
第二范式是什么?我突然想到,比如订单表格中包含订单号和客户姓名。
如果也直接写客户的名字,下次客户改名字时,订单单就得改,很麻烦。
您应该为客户信息制作一个单独的表。
订单中仅存储客户编号。
如果更改名称,则只会更改customers表,而orders表不会更改。
这是第二范式。
非主键字段不应自行生长分支,而应完全依赖主键。
什么是第三范式?哦,这意味着,客户名称不应该出现在订单表中。
客户表中的客户姓名和电话号码应仅取决于客户号码。
客户端名称不能取决于客户端类型。
那会更混乱。
需要保证每个非主键字段都直接识别主键。
这样,茧层层剥落,桌子就更加独立了。
修改位置的影响会更小。
但是如果这样去掉的话,查询会不会变慢呢?比如要查订单,查找客户姓名,就需要联表来查找。
这取决于具体情况。
有时候放慢脚步也是可以的。
不过,数据管理很方便。

数据库设计三大范式

2 02 2 年,我参加了某城市的数据库设计培训。
当时老师提到了数据库设计的三种主要范式,我很困惑。
第一个范式,简单来说,就是每个领域都是不可分割的。
例如,在用户信息表中,地址不能分为城市、地区和详细地址。
第二范式基于第一范式,并要求每一列与主键相关联,而不仅仅是主键的一部分。
例如,订单信息表不能仅根据产品编号存储产品名称、单位和价格。
第三范式基于第二范式,要求每一列与主键直接相关,不能间接相关。
例如,订单数据表不能通过客户编号间接存储客户名称和公司信息。
后来我意识到,这个范式其实是为了减少数据冗余,让数据库结构更加合理。
也许我当时有偏见,认为这个规则太死板,但现在想来,它确实很重要。