2009-12-02 73 views
1

我正在看以下db model,我對此有疑問。我相信這是一個很好的設計,因爲它背後的人似乎相當合格,雖然有些事情沒有意義:拍賣數據庫模式的問題

  1. 爲什麼他分開出價和賣家?我以爲你會有用戶,用戶可以出價和出售物品。您將擁有一個參考用戶的出價表和一個參考用戶表的拍賣表。他在他的教程中談了很多關於確保模型具有可擴展性和可供更改的準則(例如,沒有狀態列,在另一個表中引用了狀態),那麼這裏有什麼?
  2. 爲什麼他們的領域像「計劃關閉日期」和「贏家」。這不是數據重複,因爲計劃的關閉日期可以使用最後的出價時間來計算(對於使用自動延期的倉庫),而贏家僅僅是拍賣結束時的最後一次出價..?

僅供參考:我試圖從頭開始構建我自己的PHP/MySQL拍賣網站,事實證明這很困難,所以關於這方面的教程將非常棒!

謝謝!

回答

1

他爲什麼把競標者和賣家分開?

每個表都有具體到每一個獨特的列,所以他讓他們分開。我實際上會與用戶和子類型出價者和賣家一起去用戶,如:

TABLE User (UserID (PK), ... all common fields for any user) 
TABLE Bidder (UserID (PK,FK) ... all fields specific to bidders) 
TABLE Seller (UserID (PK,FK) ... all fields specific to sellers) 
1

關於「有計劃的結束日期」和「勝利者」:
是的,這是數據重複,但在某些情況下,你必須與生活以正確縮放。

當然,您可以使用「出價」表格中的最後一次出價時間來計算拍賣的結束日期,但是如果您的網站變得非常大,則不需要每次有人加載「拍賣即將結束「列表 - 因爲您必須爲每次單一活動拍賣計算每次拍賣,以找出即將結束的少數拍賣。
(這個列表將會被加載很多,相信我!)。

與獲勝者相同 - 如果您擁有拍賣 表中的信息,則加載速度會更快,因此您並不總是必須加入「出價」表,並從每次拍賣的最後出價中獲取用戶。
想象一下顯示您在過去60天內贏得的所有拍賣的「我的eBay」中的頁面 - 每次有人加載此列表時,您都必須搜索所有拍賣的所有出價。

如果您期望它可以與很多用戶一起擴展,那麼完美規範化的數據庫並不總是最好的解決方案。