数据库:数据库设计三范式
来源:互联网 发布:sql 字段名为变量 编辑:程序博客网 时间:2024/06/05 19:46
第一范式:
不要向表中输入重复的值 ! 要有主键
表1 学生表
在表中有成千上万条数据的时候,如果没有规则的存在,可能会有很多重复的数据。解决这类问题的办法是设立一个主键,主键用来标识唯一的一条记录,并且不可重复
在多个字段可以被选择的情况下,作为主键的字段应该选择最符合逻辑的一个,一般选择与业务无关的字段,比如自增的Id。
由于效率的关系,请尽量选择一个数值类型的字段或者定长字符串。
很明显email字段也不会重复,理论上也可以作为主键,但是效率低下。所以还是用学号作为主键。
第二范式:
存在多对多关系时只有一个字段作为主键是不够的。
譬如学生和老师的关系,他们之间是多对多的关系,一个学生可以同时学习多个老师的课,而一个老师可以同时教多名学生,很明显单独用学生学号或单独用老师编号都不足以确定一条记录,需要把学号和教师编号的组合作为主键。但是学生姓名是依赖于学号的,不依赖教师编号,而教师姓名是依赖教师编号而不依赖学号,也就是说存在部分依赖,这个时候容易产生部分依赖,会产生冗余数据,
解决这个问题的方案是把这个表分解为三个表,建立中间关联表。
分解结果:
这样每张表都不存在冗余数据,并且通过表连接可以得到任意需要的数据,这种表之间不存在部分依赖的情况,称之为符合第二范式。
第三范式:
一对多的关系。如果学生表中是这样的数据
一个班级可以拥有多个学生,一个学生只能属于一个班级,但是很明显班级名称和班级信息存在大量重复的出现,这些值并不直接依赖于学号(主键),而是依赖于班级号,也就是时说表中出现了传递依赖,即从学号传递到班级号,又从班级号传递到班级名称,一旦有传递依赖的存在,表中就会有大量的冗余数据。
解决这个问题的办法是把这些和学号(主键)没有直接联系的信息记录的新的表里面,即班级表。因此,只在学生表中记录班级编号就可以了,如果想查询班级名称,就想雇员表emp和部门表dept一样,把两张表做连接,到班级表中取查询就可以了!(在多的一方加外键)
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计 三范式
- 数据库设计 三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库三范式设计
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- 数据库设计三范式
- PHP去除重复的数组数据
- JAVA学习笔记(十一)连接数据库
- 疑问
- TFS双机热备份机制研究
- live.com与live.cn邮箱收不到QQ绑定激活信的解决方法
- 数据库:数据库设计三范式
- linux 编译源文件
- Solaris下人脸识别程序(OpenCV)
- 允许Python文档中显示中文 & 允许SublimeText2输入中文 & 允许Python输出unicode字符
- inline 内联函数
- VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
- IOS 视频播放--
- 网络经典命令行
- 数据库:DML、事务处理、约束、视图、序列(sequence)、索引