zoukankan      html  css  js  c++  java
  • 数据库范式

    后面的范式一定要满足前面的范式!!!

    第一范式:(1NF)

    是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域(列不能在分)。

    错误一:(
    关系型数据库(列固定 行多个)MySQL oracle sqlserver 
    非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis 

    id name age sex tel tel1 tel2 tel3 tel4 tel5

    错误二:
    id name age sex tel
    1 张三 18 男 
    2 李四 18 男 110
    3 王五 18 男 120,130,140

    正确
    User telephone
    id name age sex id uid tel
    1 张三 18 男 1 2 120 
    2 李四 19 男 2 3 130
    3 王五 19 男 3 3 140

    第二范式:(2NF)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。

    选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如:学生表中唯一的标示是学生的编号或ID。

    第三范式(3NF)(在实际开发中,适当的冗余能提高开发效率)

    第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

    例如:

    student学生表:

    id name age gname 班主任
    1 张三   18     QY97  罗
    2 李四   18     QY97  罗
    3 王五   18     QY98  罗
    4 赵六   18     QY98  萝

    将学生的班级设计为一个班级表,关联查询即可

    id name age gid       id gname
    1 张三  18  1     1  QY97
    2 李四  18  1     2  QY98
    3 王五  18  2
    4 赵六  18  2

    附:

    主表:在数据库中建立的表格即Table,其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识。

    从表:以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。

    也就是说,在设计表的时候存在一对多的关系,例如: 一个班级 有 多个学生,那么班级中的主键就作为学生中的外键使用,也就是班级表为主表,学生表为从表。

  • 相关阅读:
    剑指OFFER 连续数组的最大和
    剑指OFFER 两个链表的第一个公共结点
    剑指OFFER 替换空格
    剑指OFFER 二叉树中和为某一值的路径
    剑指OFFER 二叉树的镜像
    剑指OFFER 从上往下打印二叉树
    剑指OFFER 删除链表中重复的结点
    剑指OFFER 数组中只出现一次的数字
    剑指OFFER 调整数组顺序使奇数位于偶数前面
    C 语言 sleep 函数
  • 原文地址:https://www.cnblogs.com/duguangming/p/10841053.html
Copyright © 2011-2022 走看看