1

假设有一个表,其中包含这些行:

-personID,
-personName,
-personInterests

还有另一个表,存储兴趣:

-interestID
-interestName

一个人可以有多种兴趣,所以我将serialize()-d 或JSON表示的形式interest array放入该interest领域。这不是String像“阅读”那样的 ,而是interests表的索引,它存储可能的兴趣。一个字段中有多个外键。

最好的方法是使用外键,但不可能在一个字段中实现多个引用......

如何运行这样的查询,而不 REGEX通过软件或拆分字段的内容?如果将索引放在一个字段上不是可行的方法,那么如何实现这样的结构呢?

4

2 回答 2

3

严格不建议在一个字段中存储多个索引或任何引用。你必须创建一些我称之为“会合”表的东西。

在您的情况下,它具有:

 - ID
 - UserID (foreign key)
 - InterestID (foreign key)

每个人都可以有多个兴趣,因此当一个人为自己添加新兴趣时,您只需在此表中添加一个新行,该行将具有对该人的引用和具有外键的所需兴趣NOT NULL

在大型项目中,当有太多可用的变化时,建议不要在ID此表中设置一行,而是同时设置两个foreign keysprimary keys这样重复将是不可能的,并且table-index会更小,以及在查找的情况下,它会从昂贵的计算能力中消耗更少。

所以最好的解决方案是:

 - UserID (foreign key AND primary key)
 - InterestID (foreign key AND primary key)
于 2013-08-07T03:36:03.007 回答
1

我相信您可以实现这一点的唯一方法是创建第三个表,该表实际上将由触发器更新(类似于 Gabor Dani 建议的)

Table1 
-personID,
-personName,
-personInterests

Table2 
-interestID
-interestName

Table3 
-personInterestID (AutoIncrement Field)
-personID
-interestID

然后您需要编写一个触发器来执行此操作,可能需要一个存储过程,因为您需要遍历该字段中的所有值。

于 2013-08-07T08:00:38.970 回答