首页 新闻 搜索 专区 学院

数据库三范式设计

-3
悬赏园豆:30 [已解决问题] 解决于 2020-08-03 20:07

有没有大佬一句话点通数据库三范式的设计要求啊?我自己的理解是:所有表的所有列字段是唯一的?

西装暴徒老为的主页 西装暴徒老为 | 初学一级 | 园豆:31
提问于:2020-07-29 19:31
< >
分享
最佳答案
2

不好意思,一句话说不清楚三个范式,而且你说的不对,除了主键,别的列允许重复啊,除非你设置了唯一索引。这样理解3范式,结合实际情况就很容易记住:

  • 第一范式:字段不可再分割。比如,有一个字段表示联系人,你如果这样存:[张三,王五,李四],把多个人用逗号分隔,而且你有试图根据联系人过滤出数据来的需求,就会产生麻烦,违反了第一范式,应该修改表结构分别存3行。如果你确定将来不会有根据联系人过滤数据的需求产生,那么张三,王五,李四也可以作为一个不必分隔的部分用逗号分开存储,是否可再分隔,是需求决定的。

  • 第二范式:在满足第一范式的基础上,每行必须有一个不可重复的主键。

  • 第三范式:在满足上面两个范式的基础上,多个表之间,除了外键,不会有任意两个重复的列。比如成绩表里有了外键学生Id,这个时候学生姓名就不用放在成绩表里了,可以根据join查询到,这就满足了第三范式。实际情况是,有时候为了优化查询或需求所致,会故意违法这个范式,有的数据也会同时存在多个表里

比喻:第一范式规定人应该鼻子是鼻子,眼是眼,不可以鼻子和眼长一起;第二范式规定人要有一个唯一的身份证号码;第三范式规定如果一个人交了女朋友,只要把一把钥匙给女朋友就行了,她想来取什么可以通过钥匙打开房间来取,不用把东西复制一份放在女友房间

收获园豆:30
会长 | 大侠五级 |园豆:9678 | 2020-07-30 09:26

我现在好牛逼啊,随便一写就这么多字?

会长 | 园豆:9678 (大侠五级) | 2020-07-30 09:43

@会长: 实属牛逼,唉唉唉就是看的例子大概都明白了然后自己根据项目需求做数据库的时候就又点摸不清头脑 到底某些字段该不该拿出来单独建表

西装暴徒老为 | 园豆:31 (初学一级) | 2020-07-31 20:12

@帅过马化腾: 看需求

会长 | 园豆:9678 (大侠五级) | 2020-08-03 08:58

@会长: 所以脑子都炸了 几十上百个表 又怕建少又怕建多

西装暴徒老为 | 园豆:31 (初学一级) | 2020-08-03 20:07

@帅过马化腾: 只要需求理解透了,表好建

会长 | 园豆:9678 (大侠五级) | 2020-08-04 08:34
其他回答(1)
0

可以的话你用一句话解释一下 E=MC^2 吧。

爱编程的大叔 | 园豆:30753 (高人七级) | 2020-07-30 09:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册