Mysql 每个id只允许列有一次true?

Mysql 每个id只允许列有一次true?,mysql,Mysql,我有这张桌子: ID | genre_id | is_best_in_genre | movie_name -------------------------------- 1 | 3 | 0 | Hateful Eight 2 | 3 | 0 | Django Unchained 2 | 3 | 1 | Inglorious B 2 | 3

我有这张桌子:

ID | genre_id | is_best_in_genre | movie_name
--------------------------------
1  | 3        | 0                | Hateful Eight
2  | 3        | 0                | Django Unchained
2  | 3        | 1                | Inglorious B
2  | 3        | 0                | Once Upon A Time in Hollywood
在每种类型中是最好的吗?对于每种类型id只能是一次。每种类型中只能有一部最好的电影。 我该如何作出这样的限制?

另一种想法:

更恰当、规范化的处理方法可能是创建一个单独的“最佳流派”表,并对流派id进行唯一约束

这也更容易更新,因为在选择新的“最佳”时,您无需确保所有内容都为0。

备选方案:

更恰当、规范化的处理方法可能是创建一个单独的“最佳流派”表,并对流派id进行唯一约束


这也更容易更新,因为在选择新的“最佳”时,不需要确保所有内容都为0。

更好的方法可能是将“最佳”类别中的列移动到单独的联接表中。一个包含两列的简单表可以完成此任务:

CREATE TABLE best (
  idmovie int,
  idgenre int,
  PRIMARY KEY (idgenre))  
这需要与原始表连接,如:

SELECT m.*, CASE b.idmovie>0 THEN 1 ELSE 0 END best_in_genre
FROM movietable m
LEFT JOIN best b ON idmovie=id AND idgenre=genre_id

best表中的主键约束将确保每个类型只能出现一次。

更好的方法可能是将best表中的列移动到单独的联接表中。一个包含两列的简单表可以完成此任务:

CREATE TABLE best (
  idmovie int,
  idgenre int,
  PRIMARY KEY (idgenre))  
这需要与原始表连接,如:

SELECT m.*, CASE b.idmovie>0 THEN 1 ELSE 0 END best_in_genre
FROM movietable m
LEFT JOIN best b ON idmovie=id AND idgenre=genre_id

表中的主键约束最好能确保每种类型只能出现一次。

我认为您必须通过触发器强制执行此操作。您可以将逻辑本身构建到查询中。我认为您必须通过触发器强制执行此操作。您可以将逻辑构建到查询本身中