2012-03-30 63 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