MySQL:实现一个;“条件主键”;

MySQL:实现一个;“条件主键”;,mysql,python-3.x,database-design,flask-sqlalchemy,Mysql,Python 3.x,Database Design,Flask Sqlalchemy,这是我的意见表。用户提交挑战。他们可以提交任意数量的提交,直到有正确的提交。一旦记录了正确的提交,就不应该再提交challenge\u id,user\u id组合。我最初是在我的应用程序中强制执行此约束,但希望将此约束移动到DB +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra

这是我的意见表。用户提交挑战。他们可以提交任意数量的提交,直到有正确的提交。一旦记录了正确的提交,就不应该再提交
challenge\u id
user\u id
组合。我最初是在我的应用程序中强制执行此约束,但希望将此约束移动到DB

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id      | int(11)      | YES  | MUL | NULL    |                |
| challenge_id | int(11)      | YES  | MUL | NULL    |                |
| correct      | tinyint(1)   | YES  |     | NULL    |                |
| timestamp    | datetime     | YES  |     | NULL    |                |
| flag         | varchar(512) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
我试过的 我已经尝试将表的主键设置为
键(user\u id,challenge\u id,correct)
。问题是,只要正确的是错误的,就可能有多个提交


解决此问题的一种方法是什么?

如果您不需要记录错误的提交,请不要

如果您确实需要完整的历史记录,正如您所观察到的,不能通过
UNIQUE
键来完成

计划A:添加一个
触发器
,检查是否插入第二个正确答案。同时,PK还需要其他东西

计划B:有一个正确提交的表格和一个不正确(或可能全部)提交的表格。两者都不一定需要
正确的
列。也许其他一些列不必同时出现在这两个表中。PKs会有所不同