存储值列表(例如兴趣)

Dan*_*Dan 14 mysql database-design list

我有一个用户表(ID,FNAME,LNAME,INTERESTS,...)以及另一个表来保存他们可以选择的特定利益集:电影,电视,广播,舞台,站立.

他们可以有多个兴趣,那么我如何将这些信息存储在用户利益的字段中呢?或者,实现这一目标的最佳替代方法是什么?

Nev*_*uyt 8

这是一个多对多的关系.您可以通过引入"连接表"来存储它们.

Table Users:
-----------
UserID PK
Name
...


Table Interests
-------
InterestID PK
Description.
....


User_interest
-----------
UserID PK, FK
InterestID PK, FK
Run Code Online (Sandbox Code Playgroud)

  • 嗯 - 如果你需要问,你可能需要阅读SQL,联接,关系模型等.一个好的起点是http://www.w3schools.com/sql/sql_intro.asp (4认同)
  • “User_interest”中的“UserInterestID”列是多余的。该表应该只有两列,其主键应该是`(UserID, InterestID)`。 (2认同)
  • 听起来不错但是如何查询数据库以使用此方法为我提供用户兴趣列表? (2认同)

Lig*_*ica 6

在您的MySQL书中阅读有关数据库规范化的信息。这是一个重要的主题,因此可能有一章很长。

简而言之,您删除interests并最终得到第三个表,例如:

user_id | interest_id
--------+------------
   1    |     1
   1    |     2
   2    |     1
   3    |     4
Run Code Online (Sandbox Code Playgroud)

这为您带来了多对多的关系。


oez*_*ezi 3

对此的最佳解决方案是使用 3 个表(第三个表用于存储兴趣与用户的连接):

user (id, name)
interest (id, description)
user_interest (user, interest)
Run Code Online (Sandbox Code Playgroud)

这称为数据库规范化