数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

高性能MySQL:范式和反范式


发布日期:2023年07月20日
 
高性能MySQL:范式和反范式

范式和反范式

对于任何给定的数据通常都有很多种表示方法从完全的范式化到完全的反范式化以及两者的折中在范式化的数据库中每个事实数据会出现并且只出现一次相反在反范式化的数据库中信息是冗余的可能会存储在多个地方

如果不熟悉范式则应该先学习一下有很多这方面的不错的书和在线资源在这里我们只是给出阅读本章所需要的这方面的简单介绍下面以经典的雇员部门部门领导的例子开始

这个schema 的问题是修改数据时可能发生不一致假如Say Brown 接任Accounting 部门的领导需要修改多行数据来反映这个变化这是很痛苦的事并且容易引入错误如果Jones这一行显示部门的领导跟Brown这一行的不一样就没有办法知道哪个是对的这就像是有句老话说的一个人有两块手表就永远不知道时间此外这个设计在没有雇员信息的情况下就无法表示一个部门如果我们删除了所有Accounting部门的雇员我们就失去了关于这个部门本身的所有记录要避免这个问题我们需要对这个表进行范式化方式是拆分雇员和部门项拆分以后可以用下面两张表分别来存储雇员表

和部门表

这样设计的两张表符合第二范式在很多情况下做到这一步已经足够好了然而第二范式只是许多可能的范式中的一种

这个例子中我们使用姓(Last Name)作为主键因为这是数据的自然标识从实践来看无论如何都不应该这么用这既不能保证唯一性而且用一个很长的字符串作为主键是很糟糕的主意

返回目录高性能MySQL

编辑推荐

ASPNET MVC 框架揭秘

Oracle索引技术

ASP NET开发培训视频教程

数据仓库与数据挖掘培训视频教程

上一篇:高性能MySQL:MySQL schema设计中的陷阱

下一篇:高性能MySQL:范式的优点和缺点