`
wangjian5748
  • 浏览: 205690 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

一个经典的建模问题

阅读更多

我们在建模时最常见的关系是one-to-one,one-to-many,many-to-one等,最近我注意到一个问题,就是两个实体同时存在one-to-manyone-to-one关系,而且这种两种关系也是有联系的,那会产生什么样的问题呢?这就是我写这篇文章的目的

考虑这种一个场景:部门与员工的关系,一个部门有多个员工,一个员工属于一个部门,这是双向one-to-many关系;同时部门中有个员工为主管,且一个员工只能为一个部门的主管。这是one-to-one关系,而且这个one-to-one关系是以前面那个one-to-many为基础的。

这里我提供几种建模方式作为讨论:

第一种,最简单的方式,建立隐式的one-to-one的关系,这种方式的缺点,不好做O-R映射,至少,我目前还想不到怎么用hibernate  annotation来实现。

<v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:extrusionok="f" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape type="#_x0000_t75" id="_x0000_i1025" style="WIDTH: 155.25pt; HEIGHT: 165pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>

<v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:extrusionok="f" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape type="#_x0000_t75" id="_x0000_i1025" style="WIDTH: 155.25pt; HEIGHT: 165pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>

第二种,通过一个中间表来建立one-to-one关系,与第一种比,这个好写O-R映射文件,不过,从数据建模的角度看,没有体现出one-to-one的关系是建立在one-to-many基础之上,这只能由程序员在编程代码中来实现,尤其是,若想获得某个部门的所有员工时,就要查询两张表

<v:shape type="#_x0000_t75" id="_x0000_i1026" style="WIDTH: 278.25pt; HEIGHT: 232.5pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png" o:title=""></v:imagedata></v:shape>

第三种,与第二种相似,就是把部门主管表改为部门员工表,第二种方式以已部门为中心,这种方式以员工为中心,而且这种方式与第二种比较会有较大性能损失,尤其在部门员工数比较多的时候

<v:shape type="#_x0000_t75" id="_x0000_i1027" style="WIDTH: 290.25pt; HEIGHT: 230.25pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image005.png" o:title=""></v:imagedata></v:shape>

第四种,就是在部门中建一个指向员工表的外键(“主管”),这种方式有个缺点,就是在生成数据库时,会产生“鸡生蛋”与“蛋生鸡”的问题。而且,我一直认为这种问题在数据建模时,应该严格避免的

<v:shape type="#_x0000_t75" id="_x0000_i1028" style="WIDTH: 248.25pt; HEIGHT: 201.75pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png" o:title=""></v:imagedata></v:shape>

我自己目前采用第二种方式,大家可以讨论哪种方式比较好

<o:p> </o:p>

分享到:
评论

相关推荐

    数学建模 送货最优问题

    2010太原六大高校数学建模竞赛C题。资源最优分配问题。数学建模经典问题。

    MATLAB数学建模经典案例.rar

    MATLAB数学建模经典案例.rar

    经典数学建模选区划分问题

    数学建模选区划分经典题解答

    数学建模经典例题

    建模就是运用数学的思想方法、数学的语言去近似地刻画一个实际研究对象,构建一座 沟通现实世界与数学世界的桥梁,并以计算机为工具应用现代计算技术达到解决各种实 际问题的目的。建立一个数学模型的全过程称为数学...

    数学建模——黄河治沙

    数学建模——黄河治沙。数学建模课程的一道作业题,简单地用matlab实现了黄河治沙数学建模问题。黄河治沙是一道经典的建模题

    数学建模常用方法MATLAB经典求解方法

    数学建模常用方法MATLAB经典求解方法,比较经典,很好的概括了常用方法,对数学建模学习者很有帮助。

    公交车调度 建模经典论文2篇

    数学建模 国奖获得者 公共交通是城市交通的重要组成部分,作好公交车...如何将这个调度问题抽象成一个明确、完整的数学模型,指出求解模型的方法;根据实际问题的要求,如果要设计更好的调度方案,应如何采集运营数据

    数学建模影院座位设计问题

    关于影,值得一看院座位设计的经典设计问题。详细的解决了该问题

    2014年第十一届五一数学建模联赛赛题

    2014年第十一届五一数学建模联赛经典赛题(寻找黑匣子 能源总量控制问题 延迟退休”问题)

    数学建模经典方法

    数学建模必须掌握的常规方法,掌握的话拿奖不是问题,赶紧学习吧!

    数学建模十大经典算法

    1. 蒙特卡罗算法。该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,...建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo 软件求解。 .............

    地理建模方法-徐建华

    5.1 经典统计建模方法 5.1.1 统计检验法 5.1.2 相关分析法 5.1.3 回归分析法 5.1.4 主成分分析法 5.1.5 聚类分析法 5.2 空间统计建模方法 5.2.1 空间自相关分析 5.2.2 空间计量模型 5.3 地统计建模方法 ...

    数学建模案例精编(18个案例)

    案例一,公交车调度方案的优化模型;案例二,彩票发行方案的最优决策;案例三,露天矿生产车辆安排方案的优化模型;案例四,SARS传播状态预测的优化模型;案例五,抢渡长江问题的竞渡策略探讨;案例六,电站建设供电...

    Matlab数学建模经典案例实战源程序

    《Matlab数学建模经典案例实战》一书对应每章问题的Matlab源程序代码

    数学建模优化问题经典练习.pdf

    数学建模优化问题经典练习.pdf

    matlab经典算法的程序源码 数学建模算法汇总资料.zip

    matlab经典算法的程序源码 数学建模算法汇总资料: matlab经典算法的程序源码 十大算法讲义.pdf 排队模型.pdf 数学建模算法全收录.pdf 数学建模算法大全.pdf 算法大全第01章__线性规划.pdf 算法大全第02章_整数规划....

    2017数学建模国赛+深圳杯优秀论文

    建模主要是需要构建出一个数学模型,这个模型可以是一组方程,可以是一 个可操作的框架,也可以是一个函数。总而言之,能用数学解决问题的一种抽象 方法,就是数学模型。我们高中学的物理,在解物理题的过程,其实...

    Matlab数学建模经典案例实战源程序1积分

    Matlab数学建模经典案例实战源程序1积分,内含有matlab源代码

    MATLAB机理建模方法

    在数学建模中,如果遇到一个非典型的数学建模问题(非数据、优化、连续、评价),那么这种情况下,通常需要用到机理建模方法了。机理建模就是根据对现实对象特性的认识,分析其因果关系,找出反映内部机理的规则,...

    MATLAB数学建模经典案例实战教学PPT.rar

    Matlab数学建模实战案例PPT,可根据PPT自行学习相应经典实战案例。内一共包含25章节。6-25为实例供参考

Global site tag (gtag.js) - Google Analytics