为了在三个字段之间保持一对一的比率,我想在这三个字段上创建一个UNIQUE
索引。换句话说,对于一个表Reviews
,如果一个字段是reviewid
,则我想防止一个给定的reviewid
与一个songid
关联的情况。给定userid
。
实际上,我想对reviewid
和songid
,reviewid
和artistid
和reviewid
和albumid
的几种组合进行此操作给定的userid
。
我现在不能更改数据模式。现在,我正在尝试用PHP代码执行此操作,如果MYSQL通过Indices强制执行唯一性以确保一个人从不漏过会更好。
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。
有人可以建议如何做吗?
提前感谢您的任何建议
答案 0 :(得分:1)
在我看来,您只需要在songId,artistid和Albumid上使用单独的唯一键即可。由于reviewId是pk,因此,如果任何Songid出现在多个记录中,则它必然具有不同的reviewId。实际上,两个字段上的索引都将实现与您想要的相反的操作,只要多次使用不同的reviewId,就允许多次出现songId。多个字段上的唯一索引可确保组合是唯一的。
编辑:下面的评论中对此进行了介绍,但是确切的解决方案是,唯一索引必须位于userId上,并且要检查歌曲/艺术家/专辑;允许进行多次评论,每个用户只能进行一次。