同一个用户对同一个作品只能有一条收藏记录,但不同用户可以收藏同一个作品的mysql数据表实现

同一个用户对同一个作品只能有一条收藏记录,但不同用户可以收藏同一个作品的mysql数据表实现

✅ 方案一:数据库层面添加复合唯一索引(推荐)

在 userCollect 表中添加一个复合唯一索引 (uid, wikiID),确保每个用户对每个作品只能有一条记录。

$sql2 = "CREATE TABLE IF NOT EXISTS userCollect (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,artworkid INT(11), -- 暂时允许为 NULL,先测试网站功能status ENUM('wish', 'watch', 'watched', 'pause', 'drop') NOT NULL,wikiID VARCHAR(255) NOT NULL,uid INT(11) NOT NULL,stars TINYINT UNSIGNED NOT NULL DEFAULT 0,FOREIGN KEY (artworkid) REFERENCES artwork(id),UNIQUE KEY unique_user_wiki (uid, wikiID) -- 添加复合唯一索引
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";

说明

  • UNIQUE KEY unique_user_wiki (uid, wikiID):确保 (uid, wikiID) 组合唯一。
  • 这样,同一个用户无法重复收藏同一个作品,但不同用户可以收藏同一个作品。