数据库设计模式&经典例子&实例步骤
前言:
设计模式:
设计的经典案例:
实例:
-----------------
前言: BD了一下,好像没有说明数据库设计和数据库设计范例的。也没有出现数据库“设计模式”之类的书籍。
虽然数据库设计的基础是三范式。可是具体需求不一样,设计出来的就不一样。
设计模式: https://wenku.baidu.com/view/48116d7ba98271fe910ef92a.html
设计的经典案例: 实例1:电子商务网站类
https://blog.csdn.net/moll_77/article/details/78697672
https://www.jianshu.com/p/74c310b1d89f
实例2: 树形结构设计:
类别表_1(Type_table_1)
名称类型约束条件说明
type_idint无重复类别标识,主键
type_name char(50)不允许为空类型名称,不允许重复
type_fatherint不允许为空该类别的父类别标识,如果是顶节点的话设定为某个唯一值
【数据库设计模式&经典例子&实例步骤】实例3:多用户及其权限管理的设计
功能表(Function_table)
名称类型约束条件说明
f_idint无重复功能标识,主键
f_namechar(20)不允许为空功能名称,不允许重复
f_descchar(50)允许为空功能描述
用户组表(User_group)
名称类型约束条件说明
group_idint无重复用户组标识,主键
group_namechar(20)不允许为空用户组名称
group_powerchar(100)不允许为空用户组权限表,内容为功能表f_id的集合
用户表(User_table)
名称类型约束条件说明
user_idint无重复用户标识,主键
user_namechar(20)无重复用户名
user_pwdchar(20)不允许为空用户密码
user_typeint不允许为空所属用户组标识,和User_group.group_id关联
分类4:
四、简洁的批量m:n设计
碰到m:n的关系,一般都是建立3个表,m一个,n一个,m:n一个。但是,m:n有时会遇到批量处理的情况,例如到图书馆借书,一般都是允许用户同时借阅n本书,如果要求按批查询借阅记录,即列出某个用户某次借阅的所有书籍,该如何设计呢?让我们建好必须的3个表先:
书籍表(Book_table)
名称类型约束条件说明
book_idint无重复书籍标识,主键
book_nochar(20)无重复书籍编号
book_namechar(100)不允许为空书籍名称
……
借阅用户表(Renter_table)
名称类型约束条件说明
renter_idint无重复用户标识,主键
renter_namechar(20)不允许为空用户姓名
……
借阅记录表(Rent_log)
名称类型约束条件说明
rent_idint无重复借阅记录标识,主键
r_idint不允许为空用户标识,和Renter_table.renter_id关联
b_idint不允许为空书籍标识,和Book_table.book_id关联
rent_datedatetime不允许为空借阅时间
五、冗余数据的取舍
上篇的“树型关系的数据表”中保留了一个冗余字段,这里的例子更进一步——添 加了一个冗余表。先看看例子:我原先所在的公司为了解决员工的工作餐,和附近的一家小餐馆联系,每天吃饭记账,费用按人数平摊,月底由公司现金结算,每个 人每个月的工作餐费从工资中扣除。当然,每天吃饭的人员和人数都不是固定的,而且,由于每顿工作餐的所点的菜色不同,每顿的花费也不相同。例如,星期一中 餐5人花费40元,晚餐2人花费20,星期二中餐6人花费36元,晚餐3人花费18元。为了方便计算每个人每个月的工作餐费,我写了一个简陋的就餐记账管理程序,数据库里有3个表:
员工表(Clerk_table)
名称类型约束条件说明
clerk_idint无重复员工标识,主键
clerk_namechar(10)不允许为空员工姓名
每餐总表(Eatdata1)
名称类型约束条件说明
totle_idint无重复每餐总表标识,主键
personschar(100)不允许为空就餐员工的员工标识集合
eat_datedatetime不允许为空就餐日期
eat_typechar(1)不允许为空就餐类型,用来区分中、晚餐
totle_pricemoney不允许为空每餐总花费
persons_numint不允许为空就餐人数
就餐计费细表(Eatdata2)
名称类型约束条件说明
idint无重复就餐计费细表标识,主键
t_idint不允许为空每餐总表标识,和Eatdata1.totle_id关联
c_idint不允许为空员工标识标识,和Clerk_table.clerk_id关联
pricemoney不允许为空每人每餐花费
实例: 比如说,根据界面提取出业务规则,然后建模
https://blog.csdn.net/oldlegy/article/details/78158728
参考文档:
https://www.cnblogs.com/Kevin-ZhangCG/p/10270996.html
https://www.cnblogs.com/hxwzwiy/archive/2012/03/27/2419060.html
https://blog.csdn.net/hhuahualala/article/details/51589133
https://blog.csdn.net/SseJava/article/details/5099226?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://www.cnblogs.com/DBFocus/archive/2011/10/12/2208580.html#4380728https://www.cnblogs.com/DBFocus/archive/2011/10/12/2208580.html#4380728
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 宋仲基&宋慧乔(我们不公布恋情,我们直接结婚。)
- 21天|21天|M&M《见识》04
- 数据库设计与优化
- 数据库总结语句
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- MySql数据库备份与恢复
- 设计模式-代理模式-Proxy
- 数据库|SQL行转列方式优化查询性能实践