我最近开始玩数据库,试图用自己的例子来教自己。
我有以下问题,我正在努力解决这个问题让我感到困惑,我希望有人可以解决这个问题。
数据库有4个表。摄影师,图片,比赛和观众。这个概念是摄影师参加比赛。他们为每场比赛拍摄1张照片,观众对其进行评分。比赛的获胜者是得分最多的人。我已经提出以下限制。
对于数字1& 2 - 我不确定如何显式创建此约束。 对于3号,我不知道如何在db上表示派生值。 我正在使用MySql
任何想法,建议都将不胜感激!
最好的问候
答案 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
可能更快