MySQL_范式

一、什么是范式

范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和Boyce-Codd范式(BCNF)、。
满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
下面举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
在创建一个数据库的过程中,范化是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系以及定义所需的表和各表中的项目等这些初始工作之后的一个细化的过程。

第一范式(1NF)

数据表的每一列都要保持他的原子特性,也就是列不能在被分割。简而言之,第一范式就是无重复的列。

第二范式(2NF)

属性必须完全依赖于主键,消除部分依赖。简而言之,第二范式就是非主属性完全依赖于主关键字。

第三范式(3NF)

消除传递依赖。简而言之,第三范式就是属性不依赖于其它非主属性。

根据第三范式,建多个表,字段如下:

用户名,密码,注册日期,生日,浏览商品编号,浏览商品名字,浏览商品日期,收藏商品编号,收藏商品编号,收藏商品名字,收藏商品日期,商品编号,商品名字,商品类别,商品店铺编号,店铺名字,店家名字,购物车记录,购买记录

# 第一规范
    # 要保持表的每一列的原子性
# 第二范式
    # 完全依赖主键,消除部分依赖
# 第三规范
    # 消除传递依赖

--用户表:用户编号 用户名 密码 注册日期 生日
CREATE TABLE IF NOT EXISTS 用户表(
    用户编号 INT PRIMARY KEY AUTO_INCREMENT,
    用户名 VARCHAR(32) UNIQUE NOT NULL,
    密码 VARCHAR(32) NOT NULL,
    注册日期 DATE NOT NULL,
    生日 DATE NOT NULL
    
);
--浏览商品表:浏览商品编号 商品编号 浏览的商品日期 用户编号
CREATE TABLE IF NOT EXISTS 浏览商品表(
    浏览商品编号 INT PRIMARY KEY AUTO_INCREMENT,
    商品编号 INT NOT NULL,
    浏览的商品日期 DATE NOT NULL,
    用户编号 INT NOT NULL
);
--收藏商品表:收藏商品编号 商品编号 收藏的商品日期 用户编号
CREATE TABLE IF NOT EXISTS 收藏商品表(
    收藏商品编号 INT PRIMARY KEY AUTO_INCREMENT,
    商品编号 INT NOT NULL,
    收藏的商品日期 DATE NOT NULL,
    用户编号 INT NOT NULL
);
--商品表:商品编号 商品名称 商品类别 商品价格
CREATE TABLE IF NOT EXISTS 商品表(
    商品编号 INT PRIMARY KEY AUTO_INCREMENT,
    商品名称 VARCHAR(32) NOT NULL,
    商品类别 VARCHAR(32) NOT NULL,
    商品价格 DOUBLE NOT NULL
);
--店铺表:店铺编号 店铺名称 店家名字 商品编号
CREATE TABLE IF NOT EXISTS 店铺表(
    店铺编号 INT PRIMARY KEY AUTO_INCREMENT,
    店铺名称 VARCHAR(32) NOT NULL,
    店家名字 VARCHAR(32) NOt NULL,
    商品编号 INT NOT NULL
);
--购物车表:购物车编号 店铺编号 商品编号 用户编号
CREATE TABLE IF NOT EXISTS 购物车表(
    购物车编号 INT PRIMARY KEY AUTO_INCREMENT,
    店铺编号 INT NOT NULL,
    商品编号 INT NOt NULL,
    用户编号 INT NOT NULL
);

--购买记录表:购买记录编号 店铺编号 商品编号 用户编号
CREATE TABLE IF NOT EXISTS 购买记录表(
    购买记录编号 INT PRIMARY KEY AUTO_INCREMENT,
    店铺编号 INT NOT NULL,
    商品编号 INT NOt NULL,
    用户编号 INT NOT NULL
);

 


 

 


 

 

posted @ 2022-04-10 18:55  文明老人  阅读(46)  评论(0)    收藏  举报