MYSQL: 为三个字段的组合创建唯一索引以防止重复

MYSQL: Create UNIQUE index for combination of three fields to prevent dupes

为了保持三个字段之间的一对一比例,我想在三个字段上创建一个 UNIQUE 索引。换句话说,对于 table,Reviews 如果一个字段是 reviewid,我想防止多个 reviewid 与给定的 [=16] 相关联的情况=] 对于给定的 userid.

事实上,我想对 reviewidsongidreviewidartistid 以及 reviewid 和 [=23] 的几种组合执行此操作=] 对于给定的 userid.

此时我无法更改数据模式。虽然现在,我正在尝试在 PHP 代码中执行此操作,但如果 MYSQL 通过索引强制执行唯一性以确保永远不会漏掉会更好。

Reviews
reviewid (primary key)|text|songid|albumid|artistid|userid
1|great song|222|null|null|22
2|great album|null|333|null|22
3|great singer|null|null|444|22

//I want to exclude the following entry:
4|lousy song|222|null|null|22

我认为这应该可以通过在相关字段上使用 UNIQUE 索引来实现,但我无法 MYSQL 接受这一点。它说你不能在同一个字段上有唯一索引和主索引,在这种情况下,reviewid。

谁能建议怎么做?

提前感谢您的任何建议

在我看来,您只需要在 songId、artistid 和 albumid 上使用单独的唯一键。由于 reviewId 是 pk,如果任何 songid 出现在多个记录中,它必然具有不同的 reviewId。事实上,两个字段上的索引将完成与您想要的相反的事情,允许多次出现 songId,只要它具有不同的 reviewId;多个字段的唯一索引确保 组合 是唯一的。

编辑:它在下面的评论中有所介绍,但确切的解决方案是唯一索引需要在 userId 和正在审查的 song/artist/album 上;允许多次评论,每个用户只能评论一次。