领域模型落地数据库设计 2021-08-30 程序之旅,记录 暂无评论 577 次阅读 ## 领域模型落地数据库设计 > 早期的系统软件设计流程是以数据库为核心,当需求确定下来后,团队首先对数据库进行设计,通过数据库表作为模块接口,在数据库设计的过程中就尽量不要让模块接口存在交互,从而达到独立开发的效果。 > > 如果先进行数据库设计,但数据库设计只能描述数据结构,而不能描述系统对这些数据结构的处理。 ### 面向对象的软件系统设计流程图 ![系统设计流程图](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E6%B5%81%E7%A8%8B%E5%9B%BE-16302848530121.png) 1. 需求分析,使用用例设计,对整个系统要有那些功能罗列 2. 之后使用领域模型设计,分析整个系统业务实体,采用类图的形式,既能确定实体的属性,又能对实体功能的描述 #### 邻域对象持久化的思想 将暂时不使用的邻域对象从内存中持久化存储到磁盘中,再次使用这个邻域对象时,根据 key 值到数据库查找到这条记录,然后将其恢复成邻域对象,应用程序就可以继续使用它。 - 要插入一条记录就是创建一个邻域对象 - 要更新一条记录就是根据 key 值去修改相应的邻域对象 - 删除数据则是摧毁这个领域对象 ### 领域设计模型 - 领域模型中,无论对象还是属性,在命名时都采用中文 - 数据库设计时,要细化为英文命名,或者汉语拼音首字母,同时要确定字段类型与是否为空等其他属性 举例一个绩效考核系统的领域设计。 ![image-20210830090420232](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830090420232.png) 领域模型中的一个类就代表数据库中的一个表,类中的属性可以转换成表中的字段,比较困难的是类与类之间的关系,如何转换成表与表之间的关系,这里主要有 5 种关系可以对其进行处理。 #### 一对一 ![image-20210830091204532](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830091204532.png) #### 多对一 ![image-20210830091310116](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830091310116.png) 对于大数据的统计来说,多对一关系对系统的各种 join 是一个极大的挑战,对于数据量大的查询,建议先查询过错行为表,分页再填补当前页的其他关联信息。 #### 一对多 ![image-20210830091623050](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830091623050.png) #### 多对多 ![image-20210830091738580](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830091738580.png) #### 继承关系 在数据库设计中,继承关系的对应一般有三种方式。 方式一: ![image-20210830092144929](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830092144929.png) 如果关系子类不多,只有两三个字段,则可以通过一个标识来表示是哪个子类。`正确标识`字段前是父类字段,后边是子类的个性化字段。 - 优点:简单,整个继承关系的数据全部保存在这个表里 - 缺点:造成“表稀疏”,会影响查询数据,且占用空间 方式二: ![image-20210830092630096](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830092630096.png) ![image-20210830092645234](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830092645234.png) 父类的表字段在子类表中都存在,方式二的设计适合前端对子类有单独模块展示的情况,但业务需求是查询某个人的对于信息,就需要对三个表进行查询,效率会比较低。 方式三: ![image-20210830092837992](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210830092837992.png) 方式三就是解决方式二问题。 打赏: 微信, 支付宝 标签: none 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。