本文的核心内容:记录积累一些库表设计方案与技巧
数据库实体与实体间的对应关系
1)数据库表的菜单【分类】设计:如省市关联、图书的一、二级分类。
2)数据库表设计之树形结构的表
3)表的简化方案(特定情况,例如,用户触发过的场景记录表)
4)数据库表设计之购物车,利用Session暂时存储购物车信息。
实体与实体间的对应关系
一对一
一对一,一般用于对主表的补充。假设A表为用户信息表,存储了用户的姓名、性别、年龄等基本信息。用户的家庭住址信息也属于用户的基本信息。我们可以选择将用户的家庭住址信息放到用户信息表,也可以单独建一张表,存储用户的家庭住址信息,以用户信息表的主键作为关联。
需不需要拆分取决:表信息的关联程度、表的字段个数限度。
一对多
一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。举几个 例子:
-
- 班级表 与 学生表,一个班级对应多个学生,或者多个学生对应一个班级。
- 角色表 与 用户表,一个角色对应多个用户,或者多个用户对应一个角色。
-
- 商品表 与 图片表,一个商品对应多张图片,或者多张图片对应一个商品。
多对多
构建一张关系表将两张表进行关联,形成多对多的形式。例如:
-
- 老师表、学生表;一个学生可以选修多个老师的课程、同时一个老师也可以教多个学生。
--教师表
CREATE TABLE #Teacher(TeacherId int, Name nvarchar(20));
INSERT INTO #Teacher VALUES(1, '张老师'), (2, '王老师');
--学生表
CREATE TABLE #Student(StudentId int, Name nvarchar(20));
INSERT INTO #Student VALUES(1, '小张'), (2, '小赵');
--老师学生关系表
CREATE TABLE #Teacher_Student(StudentId int, TeacherId int);
INSERT INTO #Teacher_Student VALUES(1, 1), (1, 2),(2, 1), (2, 2);
一:数据库表的菜单【分类】设计:如省市关联、图书的一、二级分类
BookType 一级分类: 少儿、外语、计算机
BookClass 二级分类: 少儿[0-2岁、3-6岁、7-10岁、11-14岁、儿童文学]
外语[英语、日语、韩语、俄语、德语]
计算机[计算机理论、计算机考试、数据库、人工智能、程序设计]
BookInf 图书详情 : 图书信息的详细字段。。。
基于以上关系:我们建表有两种方法
①:建立三张表 一级分类表,二级分类表、图书详情表
一级分类ID->作为二级分类的外键