我们假设有一个表格,其中包含theese行:
-personID,
-personName,
-personInterests
还有另一张表,存储了兴趣:
-interestID
-interestName
一个人可以有多种兴趣,因此我将serialize()
的{{1}} - d或JSON
表示放入interest array
字段。这不是interest
,而是“阅读”,而是String
表的索引,它存储了可能的兴趣。像一个字段中的多个外键一样。
最好的方法是使用外键,但是不可能在一个字段中实现多个引用...
如何运行此类查询,不 interests
或通过软件拆分字段内容?如果将索引放到一个字段中是不可取的,那么如何实现这样的结构呢?
答案 0 :(得分:3)
严格不建议在一个字段中存储多个索引或任何引用。 你必须创建一些我称之为“rendezvous”表的东西。
在你的情况下它有:
- ID
- UserID (foreign key)
- InterestID (foreign key)
每个人都可以有多种兴趣,所以当一个人为自己添加新的兴趣时,你只需在这个表中添加一个新行,该行将引用该人和所需的外键感兴趣{{ 1}}。
对于大型项目,如果可用的变体太多,建议不要向此表格提供NOT NULL
行,而是设置两个ID
foreign keys
因此,重复将是不可能的,primary keys
将更小,并且在查找的情况下,它将从昂贵的计算能力中消耗更少。
所以最好的解决方案就是:
table-index
答案 1 :(得分:1)
我相信你可以实现这个的唯一方法是创建一个第三个表,它实际上会被一个触发器更新(类似于Gabor Dani建议的那样)
Table1
-personID,
-personName,
-personInterests
Table2
-interestID
-interestName
Table3
-personInterestID (AutoIncrement Field)
-personID
-interestID
然后你需要编写一个触发器,这样做可能需要一个存储过程,因为你需要遍历字段中的所有值。