2012-10-08 133 views
0

我有一個用戶過去買過的產品表。例如用戶表設計 - 需要的建議

item_id - user_id - title - supplier_id - - supplier_name - date added 

user_id - name 

我也有供應商的表例如

supplier_id - supplier_name 

不時供應商提交的特別優惠,然後我想傳遞給我的用戶......這可能是對一個項目或一刀切。

我的問題是如何最好地管理這個

難道當用戶登錄到系統中我經歷了所有的報價看,然後再配合他們要麼項目在過去或對供應商作爲買的情況下,一個整體(如果提供全面的)

我在想這可能需要大量的資源,比如有100000個用戶和1000個提供來查看哪些是很多查詢....或者有另一種方法會做這個?也許是一個臨時表,這將更容易交叉參考。

我必須立即寫這個,並且要確保我儘可能有效地做到這一點,但這對我來說是一個新問題,因此也是一個問題。

這是一個標準問題,它有一個簡單的解決方案?

感謝您的任何幫助。

回答

1

我覺得用兩個不同的表來管理報價是有意義的。

  • 一張桌子涉及從供應商處購買特定產品的用戶。
  • 一張桌子處理從供應商處購買任何東西的用戶。

在第一種情況下,您可以使用類似這樣的查詢來標識這些用戶。 (代碼未經測試)

select distinct user_id 
from products -- Seems like "purchases" might be a better name. 
where supplier_id = ? 
    and item_id  = ?; 

在第二種情況下,請使用類似於此類的查詢類型。

select distinct user_id 
from products 
where supplier_id = ?; 

GROUP BY子句可能會給您比SELECT DISTINCT更好的性能。

在第一種情況下,產品(物料)報價表可能如下所示。

supplier_id item_id offer_start offer_end 
-- 
1   10156 2012-08-01 2012-08-15 

而且你會得到誰應該接受的報價與沿着這些路線查詢用戶。

select distinct user_id 
from products -- Seems like "purchases" might be a better name. 
inner join item_offers on item_offers.supplier_id = products.supplier_id 
         and item_offers.item_id = products.item_id 
         and current_date between item_offers.offer_start 
              and item_offers.offer_end 
where supplier_id = ? 
    and item_id  = ?; 

如果要查詢單個用戶,這似乎往往不是這樣的話,你可以將用戶ID添加到WHERE子句。即使在一張巨大的桌子上,我也希望WHERE子句具有相當的選擇性。

0

我會創建一個名爲「special_offers」(或任何你想要的)的新單獨表格,並使它與供應商和用戶之間有多對多的關係。

0

您只會查詢特定用戶的記錄,所以它不應該是一個大問題。您將查詢過去訂單中的所有不同的item_id,以及不同的supplier_ids。這應該返回一個可管理的數字,然後您將這些ID加入您的優惠表以顯示相關優惠。您可以創建一個包含所有報價(特定項目和供應商)的表格或將它們分成2個表格。