MySQL之数据库表的设计

MySQL之数据库表的设计

2023年7月27日发(作者:)

MySQL之数据库表的设计MySQL之数据库表的设计⼀、表与表关系分类1.⼀对多⼀对多,例如:⼀个班级对应多名学⽣(客户和订单、分类和商品)建表原则: 主外键的关系。 在从表(多⽅)创建⼀个字段,字段作为外键指向主表(⼀⽅)的主键2.多对多多对多, 例如:⼀名⽼师对应多名学⽣,⼀名学⽣⼜对应多名⽼师 (学⽣和课程、⽤户和⾓⾊)建表原则: 借助中间表,拆分为两个⼀对多。 创建第三张表,中间表中⾄少两个字段,这两个字段分别作为外键指向各⾃⼀⽅的主键。3.⼀对⼀⼀对⼀,例如: ⼀个⼈只能对应⼀个⾝份证ID。在实际开发中使⽤不多,因为⼀对⼀可以设计成⼀张表。建表原则:

1.外键唯⼀ 特殊的⼀对多,主表的主键和从表的外键(唯⼀),形成主外键关系,外键唯⼀ UNIQUE2.外键⼜是主键 主表的主键和从表的主键,形成主外键关系⼆、表与表关系设计1.创建四张表1.商品分类表 category2.商品表 goods3.⽤户表 user4.收藏中间表 favorite2.表间关系分析:分类表与商品表是⼀对多关系(⼀个分类对应多个商品)商品表与⽤户表是多对多关系(⼀个商品可以被多个⽤户收藏,⼀个⽤户可以收藏多个商品)商品表与收藏中间表是⼀对多(⼀个商品可以被收藏多次)⽤户表与收藏中间表是⼀对多(⼀个⽤户可以收藏多次不同商品)3.设计例⼦ -- 创建分类表 category -- cid 分类主键,⾃动增长 -- cname 分类名称⾮空,唯⼀ CREATE TABLE category ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE );

-- 创建商品表 goods -- gid 商品主键,⾃动增长 -- gname 商品名称⾮空,唯⼀ -- price 商品价格 -- cid 外键,所属分类 CREATE TABLE goods( gid INT PRIMARY KEY AUTO_INCREMENT, gname VARCHAR(100) NOT NULL UNIQUE, price DOUBLE, cid INT, FOREIGN KEY (cid) REFERENCES category(cid) );

-- 创建⽤户表 user -- uid ⽤户主键,⾃增长 -- username 唯⼀,⾮空 -- password ⾮空 -- name 姓名 -- sex 性别 -- phone ⼿机号

CREATE TABLE user ( uid INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) UNIQUE NOT NULL, PASSWORD VARCHAR(30) NOT NULL, NAME VARCHAR(20), sex CHAR(1) DEFAULT '未定义', phone VARCHAR(11), );

-- 创建收藏中间表 favorite -- gid 商品id,外键 -- uid ⽤户id,外键 -- gid 和 uid 设置为联合主键,同⼀个⽤户不能收藏同⼀个商品两次

CREATE TABLE favorite ( gid INT, -- 商品id uid INT, -- ⽤户id PRIMARY KEY(gid,uid), -- 联合主键 FOREIGN KEY (gid) REFERENCES goods(gid), FOREIGN KEY(uid) REFERENCES user(uid) );

三、数据库范式1.什么是范式?设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越⾼的范式数据库冗余越⼩。⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,⼜称完美范式)2.函数依赖1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯⼀B属性的值。则称B依赖于A

2. 完全函数依赖:A-->B, 如果A是⼀个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。

3. 部分函数依赖:A-->B, 如果A是⼀个属性组,则B属性值得确定只需要依赖于A属性组中某⼀些值即可。

4. 传递函数依赖:A-->B, B -- >C . 如果通过A属性(属性组)的值,可以确定唯⼀B属性的值,在通过B属性(属性组)的值可以确定唯⼀C属性的值,则称 C 传递函数依赖于A

5. 码:如果在⼀张表中,⼀个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码3.三⼤范式⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,⼜称完美范式)。满⾜最低要求的范式是第⼀范式(1NF)。在第⼀范式的基础上进⼀步满⾜更多规范要求的称为第⼆范式(2NF),其余范式以次类推。⼀般来说,数据库只需满⾜第三范式(3NF)就⾏了1.第⼀范式(1NF)所谓第⼀范式(1NF)是指在关系模型中,对于添加的⼀个规范要求,所有的域都应该是原⼦性的,即数据库表的每⼀列都是不可分割的原⼦数据项,⽽不能是集合,数组,记录等⾮原⼦数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第⼀范式(1NF)表中的每个域值只能是实体的⼀个属性或⼀个属性的⼀部分。简⽽⾔之,第⼀范式就是⽆重复的域。1. 数据库表的每⼀列都是不可分割的原⼦数据项,不能是集合、数组等⾮原⼦数据项。即表中的某个列有多个值时,必须拆分为不同的列。2. 简⾔之,第⼀范式每⼀列不可再拆分,称为原⼦性。2.第⼆范式(2NF )在1NF的基础上,⾮码属性必须完全依赖于候选码(在1NF基础上消除⾮主属性对主码的部分函数依赖)1.在满⾜第⼀范式的前提下,表中的每⼀个字段都完全依赖于主键。2.简⾔之,第⼆范式就是所有列完全依赖于主键列。3.第三范式(3NF)在2NF基础上,任何⾮主属性不依赖于其它⾮主属性(在2NF基础上消除传递依赖)1.在满⾜第⼆范式的前提下,表中的每⼀列都直接依赖于主键,⽽不是通过其它的列来间接依赖于主键。2.简⾔之,第三范式就是所有列不依赖于其它⾮主键列,任何⾮主列不得传递依赖于主键。3.三⼤范式概括1NF 原⼦性:表中每列不可再拆分。2NF 不产⽣局部依赖,所有列完全依赖于主键列。3NF 不产⽣传递依赖,表中每⼀列都直接依赖于主键。⽽不是通过其它列间接依赖于主键

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690434059a349252.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信