问题标签 [many-to-many]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1732 浏览

ruby-on-rails - Rails has_and_belongs_to_many 跨 3 个表连接

我有三个模型:列表、类别和站点。列表和网站之间存在多对多关系,列表和类别之间存在多对多关系。因此,一个列表属于一个或多个站点和一个或多个类别(一个列表可以出现在多个站点和多个类别上)。

给定一个站点 ID 和一个类别 ID,我想要一组所有列表。我了解如何从站点 id (listings = site.listings) 中获取列表以及如何从类别 id (listings = category.listings) 中获取列表,但是如何从列表中获取列表集的三重连接站点 ID 和类别 ID?

sql看起来像(输入sit_id和cat_id): select l.name from Listings l, categories_listings cl, listings_sites, ls where cl.category_id = cat_id and ls.site_id = sit_id and cl.listing_id = l.id and ls .listing_id = l.id

提前致谢

0 投票
1 回答
134 浏览

c# - 如何清理双重链接的多对多关系?

首先,我不确定标题是否准确地描述了我所指的内容,因此请随时就如何称呼它发表评论,或者如果您有代表,请自行重命名。

例如,假设我有 2 个课程,书籍和图书馆。图书馆包含一个属性,该属性是它拥有的所有书籍的列表。一本书有一个属性,它是它所属的所有库的列表。

在书上,我有一个 RemoveFromLibrary 方法,可以从它的库列表中删除一个库。我也希望用同样的方法来清理另一端,即图书馆拥有的图书列表。另一端也是如此,Library 上的 RemoveBook 方法也清理了该 Book 的包含它的库列表。

首先,这有意义吗?调用代码不必担心清理并且不必调用 2 个方法来执行一个逻辑操作,这对我来说似乎很方便。我的意思是从一个列表中删除但从另一个列表中删除是没有意义的。同时,可以说这使它们耦合得太紧了,但我想如果它成为一个问题我会重构以解耦。

就实现这一点而言,我不确定的是,如果我只是调用普通的公共方法,那么我最终会得到每个方法调用另一个方法的无限循环。我可以创建一个不清理的单独的内部属性(在 C# 中工作),但感觉就像我用一种只能从另一个方法调用的方法乱扔 API。或者,我可以将底层集合公开为内部集合,这会更好一些,但它似乎仍然不理想。有没有更好的解决方案,或者我只需要使用这两个中的一个,或者确保调用代码本身进行清理?

0 投票
5 回答
18656 浏览

entity-framework - 实体框架 - Linq 到实体 - 多对多查询问题

我在 Linq To Entities 中查询多对多关系时遇到问题。我基本上是在尝试使用 Linq 复制此查询:

我环顾网络,并没有真正找到任何合适的例子来说明如何做到这一点。我得到的最接近的是:

这样做的问题是,如果客户有多个兴趣并且其中一个是“足球”,那么所有这些都会被退回。我还查看了具有逆问题的 All(),即只有当他们有一个兴趣并且是足球时才会返回,如果他们有两个并且其中一个不是足球,则不会返回任何内容。

有人有什么想法吗?

0 投票
3 回答
355 浏览

c# - 在 NHibernate 中使用哪种算法与多对多关系

我在照片和标签之间有一个多对多的关系:一张照片可以有多个标签,而几张照片可以共享相同的标签。

我有一个循环扫描目录中的照片,然后将它们添加到 NHibernate。在此过程中,一些标签会添加到照片中,例如,当照片拍摄于 2009 年时,会添加 2009 年标签。

Tag 类实现 Equals 和 GetHashCode 并使用 Name 属性作为唯一的签名属性。Photo 和 Tag 都有代理键并且是版本化的。

我有一些类似于以下的代码:

我的问题是标签不存在时,例如新年的第一张照片。AddDefaultTags 方法检查标签是否存在于数据库中,然后创建它并将其添加到 NHibernate。添加单张照片时效果很好,但是在新的一年和同一工作单元中导入多张照片时它会失败,因为它仍然不存在于数据库中并再次添加。当完成工作单元时,它会失败,因为它试图在标签表中添加两个同名的条目......

我的问题是如何确保 NHibernate 在上述情况下只尝试在数据库中创建单个标签。我是否需要自己维护一个新添加标签的列表,或者我可以设置映射以使其工作?

0 投票
1 回答
1250 浏览

django - 如何在自定义 m2m 关系模型中使用通用外键

在第一个版本中,我们可以为 ManyToManyField 使用自定义表,参数 through=MyModel。MyModel 应该包含外键。但我想使用通用外键:

内容对象作为外键。

我该怎么做?

0 投票
4 回答
44868 浏览

mysql - 如何查询多对多?

我在看 ruby​​ on rails 教程时发现了以下表格结构。

如何进行查询以选择演员参与的电影?

我不是要 ruby​​ on rails 代码。我想要实际的 mysql 查询字符串。

谢谢!

0 投票
1 回答
3408 浏览

django - 'Answer' 实例需要有一个主键值才能使用多对多关系

我有一个名为的模型Answer,它ForeignKey与另一个名为Question. 这意味着自然可以有多个问题的答案。

现在我正在尝试创建一个Answer实例,然后将 M2M 关系设置为Choice,但在接触 M2M 之前出现以下错误:'Answer' instance needs to have a primary key value before a many-to-many relationship can be used.

当我注释掉[1]问题时,问题当然消失了,但我不明白为什么它首先出现,因为如您所见,我对 M2M 根本没有做任何事情!


编辑:名称似乎也不是问题choices。我尝试将其每次出现都更改options为相同的问题。

0 投票
6 回答
8202 浏览

many-to-many - 联结表(join table)也可以用于一对多关系吗?

根据定义,Junction Table(桥表/链接表)用于多对多关系,使用时如下:

但是它不能也像在这个例子中一样容易地用于一对多关系,在这个例子中,一个用户与许多订单相关联:

(我不太了解数据库,所以如果我误解了什么,请纠正我。)

0 投票
5 回答
1223 浏览

primary-key - 如何解析 RDBMS 中的多对多集合实体?

我正在尝试为艺术家和歌曲建模,但我有一个问题,我有一个 Song_Performance 可以由许多艺术家表演(比如二重唱),所以我有一个 Artist_Group 来代表歌曲的演唱者。

好吧,我现在在 Artist 和 Artist_Group 之间建立了多对多的关系,其中 Artist_Group 由该组中的艺术家集合唯一标识。我可以创建一个交集实体,表示艺术家参与 Artist_Group (Artist_Group_Participation?)

我无法想出如何为 Artist_Group 实体提供一个主键,该主键保留了同一组艺术家代表同一组的事实,并且缺少 Artist_Group 实体的主键意味着我缺少一个Artist_Group_Participation 实体的外键。

John Carlis 和 Joseph Maguire 的“Mastering Data Modeling”一书提到了这种形状并将其称为“Many-Many Collection Entity”,并指出它非常罕见,但没有说明如何解决它,因为显然很多一对多关系不能直接存储在 RDBMS 中。我该如何代表这个?

编辑:

看起来每个人都在建议一个交叉表,但这不是我的问题。我有这个。我的问题是强制执行约束,即您不能添加 Artist_Group 条目,其中包含的艺术家组与现有组相同,忽略顺序。我想过让 Artist_Group 的 ID 是一个 varchar,它是组成它的各种艺术家的串联,如果顺序很重要,这将解决问题,但是为“Elton John and Billy Joel”设置一个 Artist_Group 并不能阻止添加“比利·乔尔和埃尔顿·约翰”的组合。

0 投票
1 回答
320 浏览

.net - 从多对多查找表中查询对象

我有一个Master1Sub1另一个调用,其中包含和对象Master1Sub1_Map的外键。有多个 ID与 中的单个 ID 相关联。Master1Sub1Sub1Master1

如果我想查看Sub1分配给特定对象的所有记录,Master1.ID我该如何处理 SubSonic 对象?我可以使用 SqlQuery 和IN嵌套选择来做到这一点,但是由于映射表使用外键,有没有更好的方法?返回一个 Sub1Collection 会很好。

我在其中看到了一些参考资料,TableSchema但我不确定我正在寻找什么。