2

我是 mySQL 的新手,在构建表方面需要帮助。以下是条件:

  1. 每个用户只能在每家餐厅评分一次(第二次评分将更新之前的记录)。

  2. 平均值 = (AverageQuality + AverageService + AverageClealiness)/NumofRates

  3. AverageQuality = 所有用户的 (userRateQuality) / 用户数率..

  4. AverageService = 所有用户的 (userRateService) / 用户数率..

以下是我的表:

CREATE TABLE IF NOT EXISTS `ratings` (
    `Average` int(5) NOT NULL,
    `AverageQuality` int(5) NOT NULL,
    `AverageClealiness` int(5) NOT NULL,
    `AverageService` int(5) NOT NULL,
    `NumofTotalRates` int(11) NOT NULL,
    `userID` varchar(20) NOT NULL,
    `restaurantID` int(11) NOT NULL,
    `userRateQuality` int(5) NOT NULL,
    `userRateService` int(5) NOT NULL,
    `userRateClealiness` int(5) NOT NULL
)

我知道这很奇怪,但我被这个问题困扰了几天,我不知道如何修复这个架构或构建一个更好的架构。我需要一些建议/指导。请回复或提出任何问题,因为这可能有助于改善我的餐桌。谢谢!

4

1 回答 1

5

您的表结构实际上没有意义。您应该存储每个用户对质量、清洁度和服务的评分。所以你可以做类似的事情

CREATE TABLE IF NOT EXISTS ratings (
   userID varchar(20) NOT NULL, 
   restaurantID int(11) NOT NULL, 
   userRateQuality int(5) NOT NULL, 
   userRateService int(5) NOT NULL, 
   userRateClealiness int(5) NOT NULL )
)

获得此数据后,您可以运行查询以获取平均评分。您不希望在存储用户评分的同一个表中存储平均评分,因为每次有人添加新评分时平均值都会发生变化。要获得平均值,可以使用 MySQL AVG 函数。 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

于 2013-03-15T04:05:18.907 回答