面试被问到过,当时说实话,是真忘记了,虽然平时设计表都很顺,但用理论表达出来,有时候却欲言又止
今天我把三范式记录下来,分享给大家,这是我面试遇到过的问题
数据库有规范,设计有规则,所以要满足标准,对于PHP开发,熟悉三大范式就行了
第一范式:1NF 原子性
什么是原子性?通俗的讲,就是代表某个特性细得不能再细了,具体的指明表示它,并且它不能再进行分割
例子:
有张user表,它有以下三个字段:
id user_name age sex
那么这样的设计是合理的,因为你的姓名不可能再分吧,你的年龄是一定的吧,性别就更不用说了
那举个反例,比如记录一个人点了什么餐,有菜名吧,如果你把字段值设置为:菜,合理吗?显示,谁知道是什么菜?
所以这里应该有张食谱的表,记录每一个菜的菜名,这就是原子性
第二范式:2NF 唯一性
定义:保证每一行的数据是唯一
怎么表示呢?通常是用primary key 主键来实现的
你会发现在工作中每张表几乎都有这个primary key 并且很有可能是auto_increment
当你的表行数据是唯一的,就满足了二范式
第三范式:3NF 数据冗余
定义:当数据表中有字段是可以被推导出来的情况,这时候不能有冗余数据
什么意思呢?
比如有下面字段的表
id,name,a