1

幸せな日。

私は映画のデータベースを作成しています。すべての映画は、ユーザーごとに 1 票を受け取り、映画のように見える「良い、良い、または公正」を評価します。これらの投票は、ユーザーの ID を持つテーブル [movies_has_rating] に保存されます。誰が投票したか、投票の種類、および作成日とともに、ユーザーが映画に 2 回参加できるようにする必要があります。これは、ユーザーごとに 1 つの投票しか許可されていないためです。ただし、これは既に PHP と MySQL を使用して行っています。クエリ、MySQL から手動で追加する可能性がまだあり、これと同じデフォルトの MySQL を確立することもできます。私の質問は次のとおりです。

1)フィールドが[vote id][user_id]を主キーとして定義されている場合、たとえば、同じ映画に対してユーザーの 2 つの評価を避けることができます。

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または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