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
表中的主键约束最好能确保每种类型只能出现一次。我认为您必须通过触发器强制执行此操作。您可以将逻辑本身构建到查询中。我认为您必须通过触发器强制执行此操作。您可以将逻辑构建到查询本身中