我们在建模时最常见的关系是one-to-one,one-to-many,many-to-one等,最近我注意到一个问题,就是两个实体同时存在one-to-many与one-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>
分享到:
相关推荐
数学建模选区划分经典题解答
数学建模中的送货路线问题是一个典型的组合优化问题,涉及到如何设计最有效的配送路径,以减少时间和资源的消耗。本文主要探讨了四种不同的场景,并提出了相应的建模方法。 首先,第一问涉及的是经典的旅行商问题...
《数学建模经典教材》是一本集合了多种数学建模领域的精华内容的教材,它涵盖了数学建模的各种经典方法和应用。在数学建模中,我们利用数学工具和理论来研究现实世界的问题,通过建立数学模型,对问题进行量化分析,...
第12章——物价预测问题,是统计建模的一个实例。MATLAB可以用来处理时间序列数据,进行趋势分析、季节性调整和预测。学习者将学会如何运用MATLAB构建预测模型,如ARIMA模型,以预测未来物价变化,这对经济决策和...
**分酒问题**是一个经典的智力挑战题目,其核心在于通过有限的操作步骤(即“倒酒”),将给定数量的酒瓶从一种状态转换到另一种指定的状态,并寻求最少的操作次数。 **问题一**描述了具体情境下的分酒问题:假设有...
标题中的“数学建模商人过河问题”是一个经典的逻辑或数学谜题,通常涉及最少步骤或最优化策略的问题。在数学建模中,这类问题可以通过不同的数学工具来解决,例如图论、动态规划或者简单的搜索算法。MATLAB作为一种...
在数学建模中,运输问题是运筹学领域的一个经典模型,它主要应用于解决资源分配、物流调度等实际问题。这个模型假设有一批货物需要从多个产地运送到多个销地,目标是在满足供需平衡的同时,最小化运输成本。在这个...
这个问题是一个经典的组合优化问题,有着广泛的应用,在日常生活中也屡见不鲜。 装箱问题的描述: 设有许多具有同样结构和负荷的箱子B1,B2,…,其数量足够供所达到目的之用。每个箱子的负荷(可为长度、重量等)...
数学建模装箱问题PPT学习教案 数学建模装箱问题是一种经典的组合...数学建模装箱问题PPT学习教案提供了一个系统的学习平台,通过对装箱问题的描述、应用、求解方法等方面的讲解,帮助学生更好地理解和应用装箱问题。
总之,“数学建模国赛优秀论文集锦-一类运输问题的建模”是一个宝贵的学习资源,它展示了如何用数学工具解决实际问题,对于学习运筹学、优化理论和管理科学的学生及从业者具有很高的参考价值。通过深入研究这些论文...
这是一个优化问题,涉及到林业资源的可持续管理。目标是最大化砍伐树木的经济价值,同时保持森林总量不变。可以建立线性规划模型来解决,其中变量表示每年砍伐的树木数量,目标函数表示经济价值,约束条件包括森林...
《谢金星优化建模与LINGO》是一本专注于数学建模和优化技术的书籍,旨在帮助读者高效地学习和应用这些理论与方法。优化建模是数据分析、工程设计、经济预测等领域的重要工具,它通过数学模型来描述复杂的问题,并...
总的来说,《建模经典教材《很齐全》》这套资源为学习者提供了数学建模的全方位指导,不仅教授理论知识,还强调实践应用和问题解决能力的培养。无论是对于学术研究还是职业发展,都是一份不可多得的学习资料。
在上述的几个经典例子中,我们可以看到数学建模是如何被用来解决实际问题的。 首先,旅馆收入优化问题是一个典型的二次函数优化问题。经理想要最大化旅馆的总收入,这涉及到房价和住房率之间的关系。通过观察不同...
旅行商问题(Traveling Salesman Problem, TSP)是组合优化领域的一个经典问题,也是计算机科学中的一项重要研究课题。TSP的问题描述为:给定一组城市以及每对城市间的距离,在所有访问每个城市恰好一次并最终返回...
在数学建模领域,经典集合的概念是至关重要的基础,它为理解和解决各种实际问题提供了理论框架。数学建模是将现实生活中的复杂问题转化为数学模型,然后通过数学工具进行分析和求解的过程。在这个过程中,集合论是...
该问题是一个经典的组合优化问题,广泛应用于物流、交通、运输等领域。 数学模型: 设 G = (V, E) 为带权图,其中 V = {v1, v2, …, vn} 是图中的顶点,E 是图中的边。每条边 (vi, vj) 都有一个权值 cij,表示从...
动态规划是解决这类问题的经典方法,通过构建一个表格,存储前i段钢材能产生的最大收益,逐步求出全局最优解。贪心策略则是在每一步选择当前看起来最好的决策,但不保证全局最优。 "steel"和"steel_2"可能分别代表...
建模就是运用数学的思想方法、数学的语言去近似地刻画一个实际研究对象,构建一座 沟通现实世界与数学世界的桥梁,并以计算机为工具应用现代计算技术达到解决各种实 际问题的目的。建立一个数学模型的全过程称为数学...
这个名为“数学建模经典模型汇总”的压缩包文件,显然为初学者提供了一个全面的学习资源,涵盖了基础的数学建模模型。以下是对这些模型的详细介绍: 1. **线性规划**:线性规划是最基础的优化模型之一,用于在满足...