MySQL数据库范式详解mysql三个范式举例

我记得有一次我在一家初创公司担任数据库管理员。
当时公司刚刚起步,业务量不大,数据库设计也比较简单。
有一天,老板突然说:“我们公司需要扩大业务,数据库需要升级。
”我一看,哎呀,这个数据库的设计真是不规范,数据冗余,查询又慢。
于是我开始优化数据库。

首先,我根据第一范式拆分在一列中存储多个值的表。
例如,名字和姓氏最初放在用户表中,所以我将它们分成两列。
然后我按照第二种范式,将非主键属性依赖于多个主键的表进行拆分。
例如,如果产品名称在订单表中重复出现,我将其拆分为单独的产品表。

这个过程虽然耗时,但效果却是显着的。
数据库查询速度得到了提高,数据冗余和不一致问题也得到了解决。
但我也发现有时为了获取一些信息,需要将几个表连接在一起,这使得查询有点复杂。

等一下,我突然想到,如果业务继续发展,我们可能需要考虑非规范化设计来提高搜索性能。
但这必须根据实际情况来决定。
不能一味追求性能而牺牲数据一致性。

这件事让我明白数据库设计真是一门科学,不仅要遵循范式原则,还要根据业务需求灵活调整。

数据库三大范式

我记得有一次翻阅朋友的婚礼宾客名单,找到一张桌子,上面有每个人的姓名、电话号码以及与这对夫妇的关系。
号码后面写着“丈夫张三,儿子李四”,这显然违反了第一个例子。
后来我把笔记分开,单独列了一份联系表,弄清楚了谁和谁有关系。
这时我才意识到,数据库中的表格看起来就像是在组织宾客名单。
每个人的信息必须明确分开,不能混在一起。

MySQL数据库的三大范式的详细说明mysql三大范式详解

第一范式:检查每一列是否不能进一步划分。
示例:学生信息表(学号、姓名、性别、电话、课程1 、课程2 )。
第二范式:在第一范式的基础上,判断非主键列是否完全依赖于主键(例如学生信息表(学号、姓名、性别、电话号码、课程ID、课程名称))。
第三范式:在第二范式的基础上,确保非主键列不依赖于其他非主键列(例如,学生信息表(学号、姓名、性别、电话号码)、课程信息表(课程 ID、课程名称、课程学分))。
确保您的课程名称没有直接链接到学生信息表。