1

私は推奨エンジンを開発しているため、大量のデータを保存し、ユーザーが行ったすべての動きを追跡する必要があります。したがって、基本的に私のウェブサイトは製品検索エンジンであり、ユーザー データとしてクエリのセットを持っています。以下は、データセットのいくつかの例です

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

User2 :
1. Product1
2. Product2

等々。

1つの方法(単純)は、各ユーザーに関連付けられたIDを持ち、そのIDに対応する文字列を次の形式にすることができます(文字列は で区切られます~):-

Unique ID - Apple IPod TOuch~Samsung Galaxy Ace Plus~HArry Porter 

しかし、後でこれらのデータをどのように扱うかを考えると、この方法は効率的ではありません。

mysql でかなり簡単に実装できる非常に効率的なモデルを思いつく人はいますか?

疑問を質問する際に不明な点がある場合はコメントしてください。

4

3 に答える 3

5

古典的なデザインは、ユーザーのためのテーブルです:

Users(user_id,user_name,reg_date....)

製品の表:

Products(prod_id,prod_name,prod_cost....)

user-->products をマッピングしたテーブル:

User_products(user_id,prod_id ....)

例 :

ユーザー :

user_id|user_name
1200   | User1 
7856   | User2

製品 :

prod_id | prod_name
12900   | Apple Ipod tOuch
45673   | Samsung Galaxy Ace Plus
99876   | HArry Porter 
34590   | Product1
56283   | Product2

ユーザー_製品:

user_id | prod_id
1200    |12900
1200    |45673
1200    |99876
7856    |34590
7856    |56283
于 2012-10-24T06:12:47.207 に答える
1

Grisha によって提案された標準的なアプローチを使用すると、クエリ「誰が製品 1 を持っているか」は次のように表されます。

select user.user_name
from users inner join user_products on users.user_id = user_products.user_id
inner join products on products.prod_id = user.products.prod_id
where products.prod_name = 'Product 1'

これは複雑に見えるかもしれませんが、実際には非常にシンプルで非常に強力です。user_products テーブルに購入日などの別のフィールドがある場合は、クエリを単純に拡張することで、それらのユーザーがいつ製品 1 を購入したか、または特定の期間中に製品を購入したすべてのユーザーを見つけることもできます。

于 2012-10-24T06:42:25.507 に答える
1

送信されたデータを操作する必要があるため、何らかの識別子で区切られた文字列は避けてください。そうしないと、非常に大量のデータを取得するときに検索エンジンが非常に遅くなります。Grisha は絶対に正しいと思います - ユーザーまたは製品検索 (数値 ID 検索) をマッピング テーブルと結合すると、text/varchar フィールドを介した検索、結果の分離などよりもはるかに高速に結果が出力されます。

于 2012-10-24T06:34:07.130 に答える