2009-04-09 134 views
2

該應用程序處理用戶和對象,用戶對具有3個特徵(每個特徵一個費率)的對象進行評級。評級系統的數據庫設計

編輯:最後一句不清楚:通過功能,我的意思是所有的對象

如何有效地設計這樣的系統中的數據庫共享審覈規定? 什麼是設計數據庫處理評級系統的最佳做法?

我在想什麼的:

表:

  • 用戶
  • 對象
  • feat1rates
  • feat2rates
  • feat3rates

和關係: 對象具有許多

  • feat1rates
  • feat2rates
  • feat3rates

用戶具有許多

  • feat1rates
  • feat2rates
  • feat3rates

回答

8

假設你是不會增加或減少的等級特徵的數量來評價,我會做收視率的一個表格,將跟蹤用戶,產品,和三列(每功能)

因此,您可以將用戶表,對象表和用戶標識和對象ID作爲組合主鍵的評分表一起使用,這樣您可以對每個用戶標準的每個對象執行一個評級。

4

非常奇怪的設計,我必須說。試想一下:

Object: ID, ... 

// Provided features cannot be shared between objects 
ObjectFeature: ID, ObjectID, ... 

User: ID, ... 

UserObjectFeatureRating: UserID, ObjectFeatureID, Rating 
+0

它不清楚,但功能是由所有的對象共享,我剛剛更新了這個問題,謝謝你的完整答案 – 2009-04-09 13:45:40

7

您希望以這樣的方式封裝數據,即每個表只包含與需要處理的內容直接相關的信息。創建鏈接表以提供不同數據集(在本例中爲用戶和對象)之間的關係。

我將創建下列表格:

用戶 - 用戶的基本信息:登錄名,密碼,用戶ID,你需要什麼。

對象 - 要評分的對象:其名稱/ ID和屬性。

功能 - 一種描述功能類型的表格,帶有某種功能名稱/ ID。這可能從您的三種主要類型開始,但您可以隨時擴展/修改此類型。您還可以自定義每個對象可用於評級的功能。

ObjectFeature - 用於對象和特徵的鏈接表。包含每個表的主鍵,從而在兩者之間建立多對多關係。

UserRating - ObjectFeature和User之間的另一種排序鏈接表。包含這兩個表的主鍵以及分配的評分。

從關係的角度來看,這是組織數據的一種比您提供的更好的方式。通過它的設計,它明確了每一組數據如何連接並實現可擴展性(例如添加額外的特徵來評級,讓不同的對象具有不同的特徵來評級)更清晰。

+0

謝謝你的答案,但功能是相同的所有對象,我只是更新了問題 – 2009-04-09 13:44:51