三个范式的定义是什么?如果不满足三个范式会造成什么结果?举例说明?
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/09 00:42:11
三个范式的定义是什么?如果不满足三个范式会造成什么结果?举例说明?
![三个范式的定义是什么?如果不满足三个范式会造成什么结果?举例说明?](/uploads/image/z/2245401-9-1.jpg?t=%E4%B8%89%E4%B8%AA%E8%8C%83%E5%BC%8F%E7%9A%84%E5%AE%9A%E4%B9%89%E6%98%AF%E4%BB%80%E4%B9%88%3F%E5%A6%82%E6%9E%9C%E4%B8%8D%E6%BB%A1%E8%B6%B3%E4%B8%89%E4%B8%AA%E8%8C%83%E5%BC%8F%E4%BC%9A%E9%80%A0%E6%88%90%E4%BB%80%E4%B9%88%E7%BB%93%E6%9E%9C%3F%E4%B8%BE%E4%BE%8B%E8%AF%B4%E6%98%8E%3F)
平时从不回答这类基本问题,但看到网上很多关于三个范式的解释是有问题的,心血来潮回答一下,
第一范式:表中每一个字段的数据都不可分割.
在目前的数据库软件及其设计中,基本只有char类字段要考虑这一范式(而不是像有些人说的现有数据库完全不需要考虑,实际上很多垃圾软件公司设计数据库为了方便以后变更,很多都用varchar型的字段),但适当合并一些char类字段,可简化数据库结构,如将电话1、电话2、电话3(定长字符串)类的设计改为电话(varchar型变长字符串),采用适当的正则表达式确保输入数据的正确性,个人感觉优于采用多个定长字段.
也可以考虑一下,区号要和号码存在一个字段?分开存?对于一些大型系统,这些细节也是需要考虑的
第二范式:非主键列完全依赖主键列.
与完全依赖所对应的部分依赖,是指某些非主键列仅依赖复合主键中的部分列,而不是整个复合主键.因此所有单主键的表都符合第二范式.
(学号,课程名称) → (姓名,年龄,成绩,学分)
违反第二范式:
课程名称 → 学分,学分实际上只依赖于课程名(与学号无任何关系),
学号 → 姓名,年龄,同理,姓名、年龄与课程名无任何关系.
第三范式:非主键列不可传递依赖主键,即非主键列互不依赖.
(学号) → (姓名,年龄,所在学院,学院地点,学院电话)
违反第三范式:(学号) → (所在学院) → (学院地点,学院电话)
实在懒得打了,带来的后果就是数据冗余了,自己查一下资料吧
第一范式:表中每一个字段的数据都不可分割.
在目前的数据库软件及其设计中,基本只有char类字段要考虑这一范式(而不是像有些人说的现有数据库完全不需要考虑,实际上很多垃圾软件公司设计数据库为了方便以后变更,很多都用varchar型的字段),但适当合并一些char类字段,可简化数据库结构,如将电话1、电话2、电话3(定长字符串)类的设计改为电话(varchar型变长字符串),采用适当的正则表达式确保输入数据的正确性,个人感觉优于采用多个定长字段.
也可以考虑一下,区号要和号码存在一个字段?分开存?对于一些大型系统,这些细节也是需要考虑的
第二范式:非主键列完全依赖主键列.
与完全依赖所对应的部分依赖,是指某些非主键列仅依赖复合主键中的部分列,而不是整个复合主键.因此所有单主键的表都符合第二范式.
(学号,课程名称) → (姓名,年龄,成绩,学分)
违反第二范式:
课程名称 → 学分,学分实际上只依赖于课程名(与学号无任何关系),
学号 → 姓名,年龄,同理,姓名、年龄与课程名无任何关系.
第三范式:非主键列不可传递依赖主键,即非主键列互不依赖.
(学号) → (姓名,年龄,所在学院,学院地点,学院电话)
违反第三范式:(学号) → (所在学院) → (学院地点,学院电话)
实在懒得打了,带来的后果就是数据冗余了,自己查一下资料吧