3.1.1 表的相关设计
文章目录
- 1.表中实体与实体对应的关系
- 2.实际案例分析
- 3.表的实际创建
- 4.总结
1.表中实体与实体对应的关系
- 一对多
- 如一个班级对应多名学生,一个客户拥有多个订单等
- 这种类型表的建表要遵循主外键关系原则,即在从表创建一个字段,此字段作为外键指向主表的主键
- 多对多
- 如一名老师对应多个学生,同样的一名学生也对应多个老师
- 这种类型的表建表要借助中间表,拆分为俩个一对多的表,使用中间表维持其之间的关系,中间表至少要有俩个字段,分别作为外键指向各自主表的主键
- 一对一
- 如一个账号只有一个账户名,一个密码,在实际开发中,此种关系只需要一张表即可实现;
- 这种类型的表建表只要保证主键唯一即可,如果涉及多表的情况,要保证主表的外键与从表的外键(唯一)形成主外键关系,外键又是主键;
2.实际案例分析
-
设计一个商品的实现案例,其中包含商品的分类信息,商品的具体信息,用户信息表,用户收藏商品详情的表共4张表,需要怎么实现??
-
表之间关系的分析
- 首先,商品表与分类表是一对多的关系,一个分类对应多个商品;
- 商品表与用户表是多对多的关系,多个商品可以被一个用户收藏,多个用户也可以收藏一个商品;
- 商品表与收藏中间表是一对多的关系,一个商品可以被收藏多次
- 用户表与收藏中间表是一对多的关系,一个用户可以收藏多次不同的商品
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 手机号-- 因为password与name容易与sql命令冲突,这里使用``将其括住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 NULL,phone VARCHAR(11));-- 创建收藏中间表 favorite-- gid 商品id,外键-- uid 用户id,外键-- gid 和 uid 设置为联合主键,同一个用户不能收藏同一个商品两次CREATE TABLE favorite (gid INT, -- 商品iduid INT, -- 用户idPRIMARY KEY(gid,uid), -- 联合主键FOREIGN KEY (gid) REFERENCES goods(gid),FOREIGN KEY(uid) REFERENCES user(uid));
4.总结
表的设计涉及到很多复杂的业务场景,只要保持好这几种表中的对应关系,将复杂的逻辑拆分开来,就一定可以实现它,但是具体实现的结果,性能的好坏,这需要实际工作经验的支持与后期的学习尝试,所以本小节只做介绍了解,不做更多详细的解读。