
为学号,课程名称列定义主键约束,即一个学生只能选相同的课程一次 看看数据

存在数据冗余 插入一门新课试试

由于主键约束的存在,在没有学生选择这门课时无法将新课程插入到表中

更新了2行数据,数据越多,同时更新的也就越多,可看出和数据冗余有很大联系






有时需要反范式


符合第一范式


将上个表拆成两个表,即符合第二范式

上面的study学生信息表,学号可以确定学院,而学院地址又与学院有关系,所以学院地址和学号传递依赖关系,所以对其拆分符合第三范式

学生表数据

学生信息表

学院信息表

需求说明

需求分析及逻辑设计,设定用户名为主键

分析

一本书可能在多个分类中,所以联合主键商品名称和分类名称,不符合第二范式,所以拆分

只有一个主键,满足三范式

需要拆分





对前面的案例进行反范式化改造

想查一个商品的信息,必须同时关联这三张表,而第三张表更是几乎每次查询都会用到确认某分类下某商品

所以对商品信息表反范式化即增加分类名称的冗余数据,为避免插入异常,保留分类信息表,这样不会发生丢失分类信息情况

订单表变换

只需查订单表,不再需要对四张表查询

由于冗余了用户手机号,商品价格在订单表和订单商品表冗余处理


优点看起来很完美,提高了写操作但是损失了读操作性能



image.png




原则



示例表

示例表数据

看出计算不准确

一种精确地实数类型


看出计算精确
定义的宽度是字符单位,存储才是字节单位

varchar类型存储特点

varchar长度选择

适用场景

存储特点

适用场景,身份证性别等

最通用时间类型



设置时区-第十时区

建表

TIMESTAMP时间随时区变化


表数据

建表

只有第二列自动更新时间,默认只有第一个TIMESTAMP列自动更新

MySQL5.7前存储时间可选方式
MySQL5.7后date,time类型横空出世


image.png



后者不仅实质是int,而且也是时间戳



第三条以前两条为基准