数据库的设计范式

设计范式是数据库设计的规范,有多种设计范式,如数据库设计第一范式,第二范式和第三范式等。数据库设计最低要满足第三范式的要求。

第三范式(3NF)

概念:一个表中的列和其他列之间既不包含部分函数依赖关系,也不包含传递函数依赖关系,那么这个表的设计就符合第三范式。

用一个电商网站的用户所有信息做案例
如下图所示

用户实体

如果把所有用户属性设计为一个表那么

用户表

优点:易于存储。缺点相对来说也是非常大。

缺点1,数据库插入异常

主键为:用户登录名

insert into 用户表(会员级别) value (青铜); 因为主键不是自增的。肯定会出现问题

缺点2,数据更新异常

要修改某一行的值时,不得不修改多行数据

用户等级:青铜 —改成–>注册会员

那么修改表语句:update 用户表 set 等级 = 注册会员’ where 等级 = 青铜

缺点3,数据删除异常

删除某一数据时不得不同时删除另一数据。

如何删除用户等级名为青铜的等级? delete from 用户表 where 用户等级= ‘青铜’

缺点4,数据存在冗余 (用户等级积分)

缺点5,数据表过款。

不符合数据设计范式

示例图

如图中所示,级别积分上限、下线- 》依赖于 用户级别-》依赖于登录名

设计符合第三范式的用户表

用户表拆分满足要求

1.用户登录表:{登录名,密码,用户状态}

2.用户地址表:{省,市,区,邮编,地址}

3.用户信息表:{用户姓名,证件类型,证件号码,手机号,邮箱,性别,积分,注册时间,生日,会员级别,用户余额}

4.用户级别信息:{会员级别,级别积分下线,级别积分上限}

用户登录表

timestamp类型特点:其他列修改数据时,会自动记录修改时间

表1

用户信息表

表2

用户等级表

level

用户地址表

用户地址表

用户积分日志表

用户积分表

用户余额变动表

用户余额表

金额用的是 decimal类型

用户登录日志表
用户日志表

像这样的用户登录日志表可以用redis做

Last modification:January 13, 2020
如果觉得我的文章对你有用,请随意赞赏