“多对多”关系的同义词(关系数据库)

Posted

技术标签:

【中文标题】“多对多”关系的同义词(关系数据库)【英文标题】:Synonym for "Many-to-Many" relationship (relational databases) 【发布时间】:2010-04-28 06:11:20 【问题描述】:

“多对多”关系的同义词是什么?我已经完成了一个对象关系映射器的编写,但我仍然不知道如何命名添加该关系的函数。

addParent() 和 addChild() 对于多对一/一对多和 addSuperclass() 对于一对一继承似乎很合乎逻辑,但 addManyToMany() 对于对象来说听起来很不直观-面向程序员。 addSibling() 或 addCousin() 也没有什么意义。

有什么建议吗?在您将此视为非编程问题之前,请记住一致的命名方案和封装对于编程来说是不可或缺的:)

【问题讨论】:

“多对多”关系的同义词是“糟糕的数据库设计”;-) 怎么样?我向你保证 Stack Overflow 的问题 标签是多对多的关系。我无法想象没有多对多可以做很多事情,因为 CSV 字段效率很低。 【参考方案1】:

也许是addFriend()?其他选项可能是addLinked()addRelated()

【讨论】:

addRelated() 听起来很棒!谢谢。 多对多关系与狂欢相关,添加相关(我)! +1 x)【参考方案2】:

在关系数据库术语中,一般情况称为包含依赖关系,即:A 是 B 的子集,其中 A 和 B 是对某些(不一定不同)关系的投影。 “外键”是包含依赖的一种特殊情况,其中 B 是候选键。

【讨论】:

【参考方案3】:

Cakephp 将此称为“拥有并属于许多”关联

http://book.cakephp.org/view/85/Saving-Related-Model-Data-HABTM

【讨论】:

对不起,我的意思是对不熟悉关系数据库但了解面向对象概念的人来说是有意义的。另外,“addHasAndBelongsToMany()”比“addManyToMany()”更难输入。【参考方案4】:

addListaddChildernaddParentsaddParentsAndChildren 怎么样?

【讨论】:

【参考方案5】:

在这个例子中http://pastie.org/938704 你不会只创建一个名为的方法:

AddUserGame(用户 someUser, 游戏 someGame)

【讨论】:

有趣的想法,但是通过 Questions Tags 示例,'QuestionTag' 本身作为一个对象似乎没有多大意义。如果我正在制作一个页面来显示问题,那么标签将是问题的孩子,而如果我正在制作一个页面来显示标签,那么问题将是标签的孩子。我想很难找到一种方法来描述两个可以是彼此的孩子的东西!【参考方案6】:

棘手!似乎没有适合“RelateXtoY()”的通用术语是我能想到的最好的。

但是,对于任何实际的“真实”数据模型,通常都有一个明显的“动词”可以使用。例如,对于说 Country 和 Airline 之间的多对多关系,您可以使用 AddRouteTo(CountryId,AirlineId) 或 TravelledToUsing(CountryId,AirlineId) 方法。

【讨论】:

【参考方案7】:

这个思路怎么样:

connect(X, Y) link(X, Y) bind(X, Y)

不仅很难为面向对象系统的这种关系找到名称,而且也很难为它们建模! 对象往往存在于层次结构中......

看看你是否能找到一个容器来支持这种关系——检查这个库使用了哪些方法名。

【讨论】:

以上是关于“多对多”关系的同义词(关系数据库)的主要内容,如果未能解决你的问题,请参考以下文章

在对象关系数据库(Oracle)中映射多对多关系

在关系数据库中对相同实体之间的多个多对多关系进行建模

Hibernate学习笔记 — 多对多关系映射

多对多自引用表

多个多对多关系(循环关系)

多对多持有关系信息