1

愉快的一天。

我正在创建一个电影数据库,所有电影都会为每个用户获得一票,对电影进行评估,“好,好或公平”这些投票存储在具有用户 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 
);

非常感谢您的帮助,非常感谢!

4

0 回答 0