在mysql数据库中有效地存储用户数据

Pra*_*ngh 1 mysql database database-design relational-database database-management

我正在开发一个推荐引擎,因此需要存储大量数据并跟踪用户所做的每一步。因此,基本上我的网站是一个产品搜索引擎,并且将具有作为用户数据的查询集。以下是数据集的一些示例

User1 :
1. Apple Ipod tOuch
2. Samsung Galaxy Ace Plus
3. HArry Porter 

User2 :
1. Product1
2. Product2
Run Code Online (Sandbox Code Playgroud)

等等。

一种方式(天真)可能是让一个ID与我的每个用户相关联,然后有一个与该ID相对应的字符串,该字符串将具有这种形式(字符串用分隔~):

Unique ID - Apple IPod TOuch~Samsung Galaxy Ace Plus~HArry Porter 
Run Code Online (Sandbox Code Playgroud)

但是考虑到以后我将如何处理这些数据,此方法效率不高。

任何人都可以提出一种非常容易在mysql中实现的非常有效的模型吗?

如果不清楚我的疑问,请发表评论。

Gri*_*aub 5

经典的设计为用户提供了一张桌子:

Users(user_id,user_name,reg_date....)
Run Code Online (Sandbox Code Playgroud)

产品表:

Products(prod_id,prod_name,prod_cost....)
Run Code Online (Sandbox Code Playgroud)

映射用户的表->产品:

User_products(user_id,prod_id ....)
Run Code Online (Sandbox Code Playgroud)

范例:

用户数:

user_id|user_name
1200   | User1 
7856   | User2
Run Code Online (Sandbox Code Playgroud)

产品:

prod_id | prod_name
12900   | Apple Ipod tOuch
45673   | Samsung Galaxy Ace Plus
99876   | HArry Porter 
34590   | Product1
56283   | Product2
Run Code Online (Sandbox Code Playgroud)

用户产品:

user_id | prod_id
1200    |12900
1200    |45673
1200    |99876
7856    |34590
7856    |56283
Run Code Online (Sandbox Code Playgroud)

  • @PrashantSingh:我不知道你来自哪里,但是上述解决方案绝对是规范方法。如果用户数是无限的,那么天真的方法将有同样多的问题,并且在尝试回答“谁拥有产品1”的问题时,用逗号分隔(或tilda分隔)字符串搜索是缓慢且无用的。我误将您的评论标记为有用;它既侮辱又无用。 (2认同)