/** *数据库设计范式?-----------数据库设计的规范! * MySQL 增删改查! * * 一、第一范式 * 1.原子性要求【不能再分了!】 ( 范式 事务acid 线程) * 2.一致性 undo 数据库缓存 * 3.隔离性 两个事物之间的隔离级别 * * 列是固定的 行多个 【关系型数据库!】mysql oracle * 【非关系型数据库】 是关系型数据库的补充(基于内存!) * * 两种错误的数据库设计范式! * * 错误1. 违背了 关系型数据库 * id name age tele、tel1、tel2、tel3 * * 错误2. 违背了 原子性要求 * id name tel * 1 zs 110,120,119 * * 正确示范! * user用户表 解决一个用户有多个十几号的问题! * * uid name age * 1 张三 12 * * telephone * id uid tele * 1 1 110 * 2 1 120 * * user表中用户zs两个手机号 通过内连接的方式 实现用户的 多个手机号! * * 二、第二范式 唯一性! * * 学生选修课 成绩表! * id name age select mark * 1 张三 12 math 99 * 2 李四 12 music 99 * 3 张三 12 java 99 * 4 李四 12 pe 98 * * 一个zs有多个主键?解决方案 建两表 1. 2. * 1.学生表 * id name age * 1 张三 12 * 2 李四 12 * 2.成绩表 * * id sid 课程 成绩 * 1 1 math 99 * 2 2 music 99 * 3 1 java 99 * 4 2 pe 98 * 使用内连接的方式 查询结果 SELECT s.name,s.age,m.`课程`,m.`成绩` FROM studendemo s,mark m WHERE s.id=m.sid * * 3.第三范式 减少冗余! * student学生信息表 * id name age gname classer * 1 zs 12 qy97 luo * 2 ss 13 qy97 luo * 3 as 45 qy97 luo * 4 ws 88 qy97 luo * * 观察得出 表中的 gname 和 classer 相同信息重复------->冗余 * * 解决方式:新建表 garden * * id uid gname classer * 1 1 qy97 luo * 2 2 qy98 luo * * 通过观察发现 为满足这三种范式,我们基本上都是,创建两张表来解决! * * 思考? * 主表和从表的关系? 那张表应该加外键? * * * 后面的范式要满足前面的要求! * * 反三范式 ? 在实际开发中 适当的冗余 可以提高开发效率。 * * * * 练习2 * *我现在的问题是 熟练掌握 数据库设计的三种范式 * 理解反三范式的意义!(没有必要,完全墨守成规,一切以实际开发为准 ,怎们简单,怎么设计数据库表) * * 设计表 学生 老师 * * 主键 和未见得区别? * 我有一个学生表 当做主表 id age name tall sex (学生特有这些属性)第一范性 原子性 不可分割! 目的 保证数据的唯一性 尽量避免数据的冗余性! */