Spring配置映射关系时一对多、多对一和多对多关联到底有何区别,可否互相取代
我们老师曾说最好都配置成多对一,这样能提高效率。但是我很疑惑,如果这种多对一足以取代其他关联方式,且优势明显,那何故还要其他的关联方式?其他的关联方式肯定有它的作用只是我...
我们老师曾说最好都配置成多对一,这样能提高效率。但是我很疑惑,如果这种多对一足以取代其他关联方式,且优势明显,那何故还要其他的关联方式?其他的关联方式肯定有它的作用只是我没遇到,到底什么情况下能用到?希望高手不要给我抽象的概念,正因为对这些概念产生疑问才来提问,最好举些实例。盼高手解答,不胜感激
展开
2个回答
展开全部
元芳说:大人这事我认为:
1>你的问题应该是数据库设计方面的,至少是Java框架中的持久层框架中的概念,与Spring好像没什么关系.
2>计算机软件是为了解决某一领域问题而设计的.所以领域问题的环境,使用情况,都影响着软件设计.例如一本书这个对象在不同的语境环境下就与其它事或物有不同的关系.
(a)"你有一本<<java编程思想>>",那么这种关系应该是:一对一.但是你一定还有其它的图书<<高等数学>><<操作系统>>等,所以关系统应该是:一对多. 注意:重要的是我们思考问题的范围,或者叫做说话的语境,我们目前谈论的都是在"人与自己的书"这个语境下的.
(b)如果是"人与图书馆的书"这个语境,刚才的一对多就有问题了.因为1个人可以借阅许多书,一本书如果不是在同一时间就可以借给许多人.所以在数据库表中设计时就应该是多对多.假设我们现在给这个数据库表取名为"T_学生借书记录",但是只用这张表是不够的,为什么?因为至少要有"T_图书"和"T_同学"这两张表来存储基本信息.
现在我们理一下思路,为了记录学生借书的记录,我们共设计了三张表:"T_同学","T_图书","T_学生借书记录".
你想一下这三张表是必须的,不能多,也不能少.实现上"T_学生借书记录"这张表有一个名词叫分解实体/关联表(UML中叫关联类).
因为关系数据库系统无法保存多对多的联系,所以必须把多对多转换成1对多,请看"T_同学"与"T_学生借书记录"的关系就是一对多.
因为一个学生可以多次借书, "T_图书"与"T_学生借书记录"的关系也是一对多.因为一本书在不同时间可以被许多人借阅.
实际上"一对多"与"多对一"这两个说法只是对一种关系的两种不同说话方式而已.例如,假设你有100本书.在这个语境下分析下面两句话"你有许多书"与"这些书都是你的",这两名话的区别是什么?只是在一句话中"主对象"与"从对象"不同而已,而人与书的关系是不变的 也就是说在数据库中的两张表A和B是一对多的关系,与B和A是多对一的关系,是一样的.
1>你的问题应该是数据库设计方面的,至少是Java框架中的持久层框架中的概念,与Spring好像没什么关系.
2>计算机软件是为了解决某一领域问题而设计的.所以领域问题的环境,使用情况,都影响着软件设计.例如一本书这个对象在不同的语境环境下就与其它事或物有不同的关系.
(a)"你有一本<<java编程思想>>",那么这种关系应该是:一对一.但是你一定还有其它的图书<<高等数学>><<操作系统>>等,所以关系统应该是:一对多. 注意:重要的是我们思考问题的范围,或者叫做说话的语境,我们目前谈论的都是在"人与自己的书"这个语境下的.
(b)如果是"人与图书馆的书"这个语境,刚才的一对多就有问题了.因为1个人可以借阅许多书,一本书如果不是在同一时间就可以借给许多人.所以在数据库表中设计时就应该是多对多.假设我们现在给这个数据库表取名为"T_学生借书记录",但是只用这张表是不够的,为什么?因为至少要有"T_图书"和"T_同学"这两张表来存储基本信息.
现在我们理一下思路,为了记录学生借书的记录,我们共设计了三张表:"T_同学","T_图书","T_学生借书记录".
你想一下这三张表是必须的,不能多,也不能少.实现上"T_学生借书记录"这张表有一个名词叫分解实体/关联表(UML中叫关联类).
因为关系数据库系统无法保存多对多的联系,所以必须把多对多转换成1对多,请看"T_同学"与"T_学生借书记录"的关系就是一对多.
因为一个学生可以多次借书, "T_图书"与"T_学生借书记录"的关系也是一对多.因为一本书在不同时间可以被许多人借阅.
实际上"一对多"与"多对一"这两个说法只是对一种关系的两种不同说话方式而已.例如,假设你有100本书.在这个语境下分析下面两句话"你有许多书"与"这些书都是你的",这两名话的区别是什么?只是在一句话中"主对象"与"从对象"不同而已,而人与书的关系是不变的 也就是说在数据库中的两张表A和B是一对多的关系,与B和A是多对一的关系,是一样的.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询