`
刘方然
  • 浏览: 30097 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

多个数据库实体与另一实体使用一张表关联的问题 – 分析篇

阅读更多

最近在工作中遇到这样一个问题:多个数据库实体(以下简称“左侧实体”)要同另一实体关联。关于关联表的设计有如下两种方案。(业务背景是,多种实体有同样的权限控制模型)。

 

方案1:为每个左侧的实体建立一张与另一实体的关联表。

方案2:只建立一个关联表,完成多个实体对另一实体的关联。需要使用额外的字段存储左侧实体类型。

 

乍一看,两种方式各有优缺点:某一方案的优点即另一方案的缺点,这里只列出缺点。

 

方案

缺点

方案1

a.       需要建立多张关联表

方案2

a.       需要使用额外的字段存储实体类型;

b.       在做关联查询的时候“可能”需要引入实体类型信息(如果采用UUID做实体主键,则无此问题)。

c.        关联表较方案1大,可能导致关联查询时速度变慢。

 

貌似两种方案都没有显著的缺点及优势。如果系统统一使用UUID做实体主键,两者的速度差距将只体现在关联表的大小上。从上述分析中,应该得出使用方案1较优的结论。

 

但是,这是单纯从数据库schema设计分析得出的结论。如果考虑到上层领域模型的设计,方案2更具优势。由于多个实体都与另一实体关联,说明,多个实体都有相同的业务操作-基于另一关联实体的操作。关于方案2性能的优化,可以考虑在数据库或ORM层次做如下处理:

 

1.       仍旧使用多关联表方案,但是数据映射上,让左侧实体继承相同的父类(如果ORM可以办得到的话)

2.       如果使用一张关联表,在数控库层次基于实体类型对关联表进行分表(partition),降低效率的负面影响。

 

1
2
分享到:
评论

相关推荐

    C#数据实体类中如何给属性赋值

    因为从数据库中取出来的是一个DataSet如果一个一个给数据实体类中的属性赋值显的非常的笨拙,而且我们的数据表多达100个.在网上搜索了下写出了个简单的方法,代码如下: 首先我们做个实体类Class1,那我们怎么找到他并...

    SQL数据库设计.doc

    用E-R图表示: 2、 一对多:A实体可以与B实体任意数量的进行关联,B中的实体最多与A中的一个实体关联 。E-R图表示: 3、 多对一:A实体最多与一个B实体进行关联,而B实体可以和任意多个A实体进行关联。E- R图表示: ...

    人力资源管理系统数据库设计与实现.doc

    (2)员工实体与员工工作经历实体的关联 一个员工可以拥有一个或多个工作经历,一个工作经历必须属于一个员工,所以员 工对员工工作经历为一对多的关系。一个员工可以只在本公司工作而没有历史工作经历 ,所以最小...

    空间数据库技术应用:属性数据采集与编辑.ppt

    一个数据表包含多个文件,如数据文件、索引文件、备注文件等。 数据库 是比数据表更大的数据组织形式。数据库是具有特定联系的多个数据表的机会。数据库的内部构造是文件的集合,这些文件之间存在某种联系,不能孤立...

    数据库权限设计与实现.doc

    还需要一张表来控制系统运行时左侧菜单中的权限分栏,也就是"权限分栏表 ",如下图: 根据上面的分析,我们进行数据库结构设计,如下图: 点击这里查看权限管理系统数据表字段设计 为了能够进行良好的分析,我们将...

    Python 手写ORM-我的一个数据库访问工具

    性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员...

    《Access2016数据库教程》第2章数据库的设计与创建.pptx

    (3) 课程表与选课成绩表之间是一对多联系,即一门课程可以有多个学生的修课成绩,而选课成绩表中每一个学生该门课程只能有一个成绩。两个表之间通过"课程编号"字段进行关联。 《Access2016数据库教程》第2章...

    SQLServer数据库设计.pdf

    SQLServer数据库设计 数据库设计 ⼀、数据库设计的必要性 在实际的软件项⽬中,如果系统中需要存储的数据量⽐较⼤,需要设计的表⽐较多,表与表之间的关系⽐较复杂,那我们就需要进⾏规 范的数据库设置。如果不经过...

    数据库系统的一些专用词汇表.txt

    关系(Relation): 一个关系就是一张二维表, 每张表有一个表名。 . 元组(Tuple): 关系表中的一行称为一个元组。元组可表示一个实体或实体之间的联系。 . 属性( Attribute): 关系表中的一个列称为关系 的一个属性,...

    发票数据库设计sql文件、Java类

    发票数据库设计是一个复杂的过程,需要考虑多个要素。下面我们将从数据结构、数据库模式、数据存储和安全性等方面对发票数据库设计进行详细说明。 一、数据结构 发票数据结构由多个实体组成,包括客户信息、发票...

    学习情景2-数据库的设计.pptx

    ER图的组成元素 联系 一对多联系(One-to-Many) 如果一个实体A可以与多个(包含0个)实体B发生关系,而一个实体B至多与一个实体A发生关系,则A与B两个实体之间具有一对多联系,简单记为1:n。 学习情景2-数据库的设计...

    数据库系统基础知识.doc

    码: 一个实体的各属性中,可以唯一标识实体的属性,这个属性可以是一个,也可以是多个 。 域:属性的取值范围。 实体集:用同一类实体的实体名和属性名抽象和刻画同一类实体。 联系:在现实世界中,事物内部及事物...

    数据库设计方案.doc

    非标识关系中,如果每个子实体的实例都与而且 只与一个父实体关联,则为强制的,否则为非强制的。如果父实体与子实体代表的是同 一现实对象,那么它们为分类关系。 2.4 第三步——定义码 通过引入交叉实体除去上一...

    数据库设计参考规范.doc

    为了解决多个联系 人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等 。若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。 可是这么设计的话,会产生一系列的问题。如...

    数据库的表设计

    也可以说当我们把一个数据库表当作一个实体,那么它里面的所有字段是不是是一个属性了呢?结果是肯定的。  二、实体间的联系  我想说的是,很简单,数据库里表跟表间的关系莫过于三种:一对一;多对多;一对多。...

    数据库设计说明书模板

    【说明】有特殊设计原因的表的用途,辨别此类表的方法:非业务数据存储表、实体域间的关联表、或设计规范中没有定义过的。注意不是简单解释字段的含义,而是要说明未来的系统如何使用这张表,以及表的变化更新情况 ...

    数据库设计的理解.pdf

    数据库设计的⼯作包括:确定数据库中包含哪些表、每个表包含哪些字段、所有表之间的怎么关联的(主、外键约束) 数据库设计的⼯作流程可以总结为:确定⽤户场景(⽤例)、从⽤户场景中提取系统实体、分析实体之间的...

Global site tag (gtag.js) - Google Analytics