问题标签 [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 投票
3 回答
16842 浏览

mysql - 如何正确索引 MySQL 中多对多连接的链接表?

假设我在表“table1”和“table2”之间有一个简单的多对多表,它由两个 int 字段组成:“table1-id”和“table2-id”。我应该如何索引这个链接表?

我以前只是创建一个复合主索引(table1-id,table2-id),但我读到如果您更改查询中字段的顺序,该索引可能不起作用。那么最佳解决方案是什么 - 为没有主索引的每个字段创建独立索引?

谢谢。

0 投票
3 回答
3421 浏览

many-to-many - 更新多对多关系中的连接表

这是对此问题的后续问题:

多对多关系中的查询示例

关于更新联结表。为此,我必须在 WHERE 子句中使用联结表中的两个键值。

例如,在此示例中,假设我想更新 UserAddresses 表中的 AddressId 字段,因为用户更改了他的地址。我必须在更新 WHERE 子句中同时使用现有的 UserId 和地址 AddressId。

我正在使用存储过程,并将 UserId 和新的 AddressId 作为参数传递。

我试过这个:

我尝试了各种组合,但我似乎无法正确使用语法。

传入的 UserId 当然与 UserAddresses 表中的相同,但这只是我尝试的一些事情。WHERE 子句似乎出错了。

有什么想法吗?

0 投票
3 回答
344 浏览

mysql - 我应该在 php 和 mysql 中以“字符串”或“整数”的形式存储为朋友吗?

我进退两难,不知道哪个更好。(我正在使用 php 和 mysql 顺便说一句)

可以说我正在开发一个社交社区网站。用户可以根据需要添加任意数量的朋友。在我的数据库中,我有一个用户表,其中存储用户的详细信息,包括用户的朋友。我应该将用户的朋友存储在:

字符串 => john;bryan;sam;paul;...;

或者

整数 => 1;21;50;1779;30;...;

字符串意味着存储他们的用户名。整数表示存储他们的用户 ID。

哪一个更好?

如果是字符串,那将是一个非常非常大的字符串(假设用户有 400 个朋友,有些用户名非常长)

如果是 id,如何在用户个人资料页面上列出朋友?获取一个长字符串(以分号分隔)中的 ID 列表,使用explode 函数将其制成数组。然后用循环显示??不麻烦吗?还有其他方法吗?如果是,请显示一些示例代码..

或者通常,你们如何将“朋友”列表存储在用户表中?

0 投票
1 回答
810 浏览

subsonic - 亚音速多对多

对于亚音速用户,

是否有关于如何处理 Subsonic 中的多对多关系的信息来源?尽管我在数据库中定义了正确的关系,但我在生成的代码中不断收到“ //no ManyToMany tables defined (0) ”。

有什么帮助吗?

0 投票
5 回答
3831 浏览

entity-framework - 实体框架:条件外键

我在数据库中有以下架构:

  • BillingReferences (ReferenceType tinyint , ReferencingId tinyint , ReferencedType tinyint , ReferencedId tinyint , IsActive bit ) - 其中所有字段(IsActive 除外)都是唯一索引的一部分。
  • BillingType (BillingTypeId tinyint , 名称varchar(50) )

ReferencingType 和 ReferencedType 是 BillingTypes 的外键。BillingTypes 包含以下行:

计费类型 ID | 姓名

1 | 标签

2 | 国家

3 | 支付提供商

4 | 付款方式

5 | 银行

ReferencedId 和 ReferencedId 表示以下实体之一的 Id(取决于引用/引用类型):

  • 银行(BankId tinyint,名称varchar(50)
  • 国家(CountryId tinyint,名称varchar(50)
  • 标签(LabelId tinyint,名称varchar(50)
  • PaymentProviders(PaymentProviderId tinyint,名称varchar(50)
  • PaymentOptions (PaymentOptionId tinyint , 名称varchar(50) )

将来每个实体都会添加更多不同的列,但现在这是简单的模式。

每个实体(国家除外)与国家之间都有(1- ) 的连接。标签与银行、PaymentProviders 和 PaymentOptions有 (1-) 的连接。并且 PaymentProviders 与 PaymentProviders 有 (1-*) 的连接

例如,如果我想将 BankId 为 201 的银行连接到 CountryId 为 3003 的国家/地区,我将在 BillingReferences 中有一条如下所示的记录:ReferencingType = 5 ReferencingId = 201 ReferencedType = 2 ReferencedId = 3003 IsActive = 1

出于可扩展性考虑,我们没有为每种类型的连接创建连接/引用表 - 如果我们想要添加另一个实体,我们所要做的就是添加它的表并在 BillingReferences 和 BillingType 中为其添加记录。

问题是我无法在 BillingReferences 和每个实体之间配置条件外键,我似乎也无法使用 EntityFramework 配置/映射它......

我找不到任何使用这种实现类型的教程或示例。我是否必须为每个连接创建一个参考表,或者有没有办法使用 EntityFramework 来配置它?

谢谢您的帮助 :)

0 投票
2 回答
591 浏览

sql - 标签/关键字匹配的最佳解决方案是什么?

我正在寻找数据库中不同记录之间关键字匹配的最佳解决方案。这是一个经典问题,我发现了类似的问题,但没有具体的问题。

我已经完成了全文搜索、连接和子查询、临时表……所以我真的很想看看你们是如何解决这样一个常见问题的。

所以,假设我有两张桌子;Products并且Keywords它们Products_Keywords以经典的多对多关系与第三个表相关联。

如果我Product在页面上显示一条记录并想显示前n 个相关产品,最好的选择是什么?

我们应该考虑到记录可能共享多个关键字,这一事实应该确定最相关产品的排序。

我也对其他想法持开放态度,但由于性能原因,T-SQL 将是更可取的解决方案。

0 投票
5 回答
192 浏览

mysql - MySQL中的重复PK

不久前在这个网站上有人告诉我,使用多对多(在我的情况下是 facebook-ish“交友”系统)的唯一方法是执行以下操作:

这不会给我留下很多相同的主键(我相信这是不可能的吗?)如果我不能将 uid 设置为 PK,我怎样才能快速搜索表格?必须有一种方法可以通过 PK 来解决这个问题。

谢谢!

0 投票
1 回答
755 浏览

nhibernate - Fluent NHibernate 对象化关系映射

寻找有关如何配置 NHibernate 以支持我的场景的答案,即具有对象化关系的多对多映射。

我有一组 Person:s 与其他 Person:s 的关系。每个关系都有一个属性,指定它们具有什么类型的关系。在 RDB 中,这是通过使用具有在该表中指定的关系类型的多对多表来完成的,然后可以通过允许更多类型来扩展模型,例如“亲密朋友”和“主要敌人”。

我希望能够查询一个 Person 对象以按类型返回所有​​相关的 Person

或者

另一个(不太可扩展的)解决方案是在类中静态指定存在哪些其他关系:

现在我必须使用带有“Person”表和“PersonPerson”表的遗留数据库。“PersonPerson”表将关系类型保存为整数。

我试图使用如下语法来做到这一点,但到目前为止没有成功......

关于使用(流利的)NHibernate 映射这个的任何提示/解决方案?

BR

/詹斯

0 投票
5 回答
1866 浏览

sql - 标签的数据库模式(例如,每个帖子都有一些可选标签)

我有一个类似 SO、Wordpress 等的网站,您可以在其中发布帖子,并且您可以在上面添加(可选)标签。

处理此问题的通用数据库模式是什么?我假设它是一个 many<->many 结构,有三个表。

有人有想法么?

0 投票
1 回答
2800 浏览

c# - 在实体框架中保存多对多关系对象

我正在尝试在实体框架中保存构成多对多关系一部分的实体,但出现错误:无法更新 EntitySet 'zRM_OP_defaultloccvgsMapping',因为它有一个 DefiningQuery 并且元素中不存在元素支持当前的操作。

我的 google-fu 在这方面很弱,但我知道我可能必须编辑设计器代码并连接一个存储过程才能手动插入。

我的表结构如下所示:

地点:LOCID,等等。

覆盖范围:CVGID,等等。

loccvgs:LOCID、CVGID(无键)

帮助!