1

我最近开始使用数据库,尝试使用示例自学。

我有以下我目前正在尝试解决的问题,这让我感到非常困惑,我希望有人能有所启发。

该数据库有 4 个表。摄影师、图片、比赛和观众。这个概念是摄影师参加比赛。他们为每场比赛拍摄一张照片,观众对其进行评分。比赛的获胜者是获得最多积分的人。我设置了以下限制。

  1. 评分介于 0 - 5 之间
  2. 只有前 20 位观众可以投票
  3. 我不想存储摄影师的总评分,因为我想学习如何计算派生值。

对于数字 1 和 2 - 我不确定如何显式创建此约束。对于数字 3,我不知道如何在 db 上表示派生值。我正在使用 MySql

任何想法,建议将不胜感激!

最好的祝福

4

2 回答 2

1

1] 据我所知,你不能直接在 MySQL 中设置这样的约束。您可以使用UNSIGNED TINYINT0-255 的允许值,但在将它们插入数据库之前,您必须检查自己是否正确。

2] 我是否正确理解您,您希望每张图片最多只允许 20 票?

您要么必须将所有选票单独存储(然后检查已经存在的选票数量),要么只保存平均选票和选票数量。无论哪种方式,您都必须自己检查并确定您是否允许用户投票。对于第一个选项:

SELECT COUNT(*) > 20 FROM votes
WHERE picture_id = '123'

第二个更简单:

SELECT votes_count > 20 FROM pictures
WHERE id = '123'

3]如果您对直接存储在图片数据库中的图片投票,您只需使用 SUM() 函数:

SELECT *, SUM(points) as total_points FROM photographers AS ph
LEFT JOIN pictures AS pic ON pic.photographer_id = ph.id
GROUP BY p.id, competition_id

我希望我在那里没有犯错。如果您有更详细的问题,请尽管问,我会尽力填补漏洞;)

于 2011-03-09T21:36:12.093 回答
1

1)看看enum值,虽然tinyint(1) unsigned可能更快

于 2011-03-09T21:39:29.407 回答