跳至主要內容

MySQL

LincZero大约 2 分钟

MySQL

目录

SQL设计

数据库设计三范式

设计表的依据。按照三范式设计的表减少数据冗余

  • 第一范式:任何一张表都应该有主键,且每个字段是原子性的不能再分(数据库表中不能出现重复记录)
    • 错误举例:不能出现一个联系方式的字段,内容为邮箱+电话
    • (隐含规则?:不能使用业务字段作为主键字段)
  • 第二范式:建立在第一范式的基础上,所有非主键字段完全依赖主键,不能产生部分依赖
    • 错误举例:(学生编号PK, 学生姓名, 教师编号PK, 教师姓名),这里教师姓名依赖主键的一部分,即该范式也要求不要使用复合主键
    • 修改方案:学生表、教师表、学生教师关系表(关系表两个外键)
  • 第三范式:建立在第二范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖
    • 错误举例:(学生编号PK, 学生姓名, 班级编号, 班级名称),这里班级名称依赖编辑编号再依赖学生编号
  • NF范式和第四范式?

一些常见关系的设计

一些设计口诀

  • 多对多,三张表,关系表 两外键(例如 教师x学生)
  • 一对多,两张表,多的表 加外键(例如 班级x学生)
  • 一对一,有两种方案(例如 用户表)
    • 主键共享:例如用户登录表,用户详细信息表(id为PK+FK)
    • 外键唯一:例如用户登录表,用户详细信息表(userid为Unique+FK)

其他

在实际开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度(没了笛卡尔积)