需要MySQL约束和派生值建议

时间:2011-03-09 21:13:34

标签: mysql constraints derived

我最近开始玩数据库,试图用自己的例子来教自己。

我有以下问题,我正在努力解决这个问题让我感到困惑,我希望有人可以解决这个问题。

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

  1. 评分介于0 - 5
  2. 之间
  3. 只有前20位观众可以投票
  4. 我不想存储摄影师的总评分,因为我想学习如何计算派生值。
  5. 对于数字1& 2 - 我不确定如何显式创建此约束。 对于3号,我不知道如何在db上表示派生值。 我正在使用MySql

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

    最好的问候

2 个答案:

答案 0 :(得分:1)

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

2]我是否理解你是否希望每张照片最多只允许20票?

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

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

对于第二个更简单:

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

3]如果您对直接存储在图片db中的图片进行了投票,则只需使用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

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

答案 1 :(得分:1)

1)查看enum值,但tinyint(1) unsigned可能更快