数据库-库表设计 【分享一些库表设计经验】

本文分享了关于数据库库表设计的经验,包括实体与实体间的对应关系(一对一、一对多、多对多),菜单分类设计,树形结构数据存储,特定场景下表的简化方法,以及购物车模块的库表设计方案。探讨了如何优化存储结构以适应业务需求。
摘要由CSDN通过智能技术生成

本文的核心内容:记录积累一些库表设计方案与技巧

数据库实体与实体间的对应关系

1)数据库表的菜单【分类】设计:如省市关联、图书的一、二级分类。

2)数据库表设计之树形结构的表

3)表的简化方案(特定情况,例如,用户触发过的场景记录表)

4)数据库表设计之购物车,利用Session暂时存储购物车信息。


实体与实体间的对应关系

一对一

一对一,一般用于对主表的补充。假设A表为用户信息表,存储了用户的姓名、性别、年龄等基本信息。用户的家庭住址信息也属于用户的基本信息。我们可以选择将用户的家庭住址信息放到用户信息表,也可以单独建一张表,存储用户的家庭住址信息,以用户信息表的主键作为关联。

需不需要拆分取决:表信息的关联程度、表的字段个数限度。

一对多

一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。举几个  例子:

    1. 班级表 与 学生表,一个班级对应多个学生,或者多个学生对应一个班级。
    2. 角色表 与 用户表,一个角色对应多个用户,或者多个用户对应一个角色。
    1. 商品表 与 图片表,一个商品对应多张图片,或者多张图片对应一个商品。

多对多

构建一张关系表将两张表进行关联,形成多对多的形式。例如:

    1. 老师表、学生表;一个学生可以选修多个老师的课程、同时一个老师也可以教多个学生。
--教师表

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->作为二级分类的外键

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值