2012-03-30 13 views
0

我想知道如何設計這個最好的,所以我不重新發明輪子設計問題:Symfony2中,doctrine2,MySQL數據庫

我有一個評分實體:

/** 
* Type of the read of this comment,for example quality 
* 
* @ORM\Column(type="string") 
*/ 
protected $type; 
/** @ORM\Column(type="datetime") */ 
protected $created; 

/** @ORM\Column(type="integer") */ 
protected $thread; 
/** 
* 
* 
* @ORM\ManyToOne(targetEntity="User") 
*/ 
private $user; 

/** 
* @ORM\Column(type="decimal", scale=2) 
*/ 
protected $value; 

其中類型是評分類型,例如「file.quality」或「file.story」,用於共享視頻。

現在我想打開視頻的詳細信息頁面,並顯示總評分(所有用戶的平均值....也有評分,這些評分與用戶無關,但來自其他地方....像

IMDB(互聯網電影數據庫)的收視率。我在想添加一個CompleteRating實體,其中我省的平均得分直接更新,只要用戶增加了一個新的投票進入Rating實體。也許通過symfony2中的聽衆類

這是最好的設計方式嗎?你會如何處理這個最好的?

回答

1

我相信有幾種方法可以做到這一點,無論是否有最佳方式真的取決於您希望評級更新的頻率,是否要讓服務器承受壓力等。

1)您的視頻實體中可能有兩列,即CompleteRating,LastRatingUpdateTime。 在你的倉庫中你可以有一個GetRating函數,每當它被調用時它會檢查最後一次更新時間,如果它比上一次評級更新晚一小時,運行一個數據庫查詢來更新評級並輸出新的評級。這當然意味着用戶必須等待才能看到他們的選票數量,但這意味着服務器壓力會更低。 2)也許你可能會討厭兩個單獨的評級,1爲外包評級(IMDB等),只有每天晚上通過cronjob更新,然後個人評級,得到或者計算時,用戶添加評級,甚至只是在飛行中,數據庫在這類事情上非常迅速。

我的投票將會是2,這真的取決於你用於抓取IMDB評級的代碼密集程度如何。

+0

感謝man,怎麼樣3.在評分表中添加一行IMDB評分(非用戶評分),但是用0或null作爲用戶ID?我試過它雖然與doctrine2,它給了我一個錯誤,因爲用戶不存在...所以也許這是另一種解決方法?....也有不同種類的收視率在同一收視表:「rating_quality」 ,「rating_sound」....等等......我也計劃在將來把評價標準提供給像「rating_user_credibilty」等用戶。 – Confidence 2012-03-30 12:30:17

+1

/** @ORM \ Column(name =「user_id」,nullable = true)* /將照顧用戶不存在的問題。 – Cerad 2012-03-30 14:24:31