MySQL - Использование PRIMARY KEY - UNIQUE INDEX связанной таблицы многие ко многим
Счастливый день.
Я создаю базу данных фильмов, все фильмы получат один голос за каждого пользователя, оценивая фильм "Хорошо, хорошо или справедливо". Эти голоса хранятся в таблице [movies_has_rating] с идентификатором пользователя. кто сделал голосование, с типом голосования и датой создания, мне нужно убедиться, что пользователь может дважды участвовать в фильме, так как разрешен только один голос на пользователя, хотя это уже я сделал через PHP и MySQL. запросы, все еще есть возможность добавить его вручную из MySQL, и также будет возможность установить этот же MySQL по умолчанию, мой вопрос:
1) Если поля определены как [идентификатор голосования] и [идентификатор_пользователя] в качестве первичных ключей, вы можете избежать двух оценок пользователя для одного фильма, например.
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 [ голосовой идентификатор] и [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 или 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
);
Большое спасибо за вашу помощь, большое спасибо!