愉快的一天。
我正在创建一个电影数据库,所有电影都会为每个用户获得一票,对电影进行评估,“好,好或公平”这些投票存储在具有用户 ID 的表 [movies_has_rating] 中谁进行了投票,投票类型和创建日期,我需要确保并防止用户可以两次参与电影,因为每个用户只允许投一票,尽管我已经通过 PHP 和 MySQL 完成了查询,仍然有可能从 MySQL 手动添加它,并且还可以建立相同的默认 MySQL,我的问题是:
1)如果将字段定义为[vote id]和[user_id]作为主键,您可以避免对同一部电影的用户进行两次评估,例如。
CREATE TABLE `user_has_rating` (
`movie_id` int UNSIGNED NOT NULL ,
`vote_id` int UNSIGNED NOT NULL ,
`user_id` int UNSIGNED NOT NULL ,
`create_at` datetime NOT NULL ,
PRIMARY KEY (`vote_id`, `user_id`)
)
2) UNIQUE INDEX [vote id]和[user_id]字段已经定义为主键时,需要添加,这在定义主键时使用UNIQUE INDEX的优点和区别。
CREATE TABLE `user_has_rating` (
`movie_id` int UNSIGNED NOT NULL ,
`vote_id` int UNSIGNED NOT NULL ,
`user_id` int UNSIGNED NOT NULL ,
`create_at` datetime NOT NULL ,
PRIMARY KEY (`vote_id`, `user_id`),
UNIQUE INDEX `vote_id` (`vote_id`) ,
UNIQUE INDEX `user_id` (`user_id`)
);
3)需要指定索引的方法类型,如“ BTREE or HASH ”
CREATE TABLE `user_has_rating` (
`movie_id` int UNSIGNED NOT NULL ,
`vote_id` int UNSIGNED NOT NULL ,
`user_id` int UNSIGNED NOT NULL ,
`create_at` datetime NOT NULL ,
PRIMARY KEY (`vote_id`, `user_id`),
UNIQUE INDEX `vote_id` (`vote_id`) USING BTREE ,
UNIQUE INDEX `user_id` (`user_id`) USING BTREE
);
非常感谢您的帮助,非常感谢!