「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL に配列を保存せずに多重投票を防ぐにはどうすればよいですか?

MySQL に配列を保存せずに多重投票を防ぐにはどうすればよいですか?

2024 年 11 月 22 日に公開
ブラウズ:458

How to Prevent Multiple Voting without Storing Arrays in MySQL?

MySQL での配列の保存: 複数投票を防ぐ別のアプローチ

MySQL はフィールド内での配列の保存をネイティブにサポートしていません。ただし、リレーショナル データベース設計を使用して、同様の結果を達成することもできます。

データベース設計

次のデータベース スキーマを考えてみましょう:

CREATE TABLE comments (
    comment_id INT PRIMARY KEY,
    body VARCHAR(100)
);

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(20)
);

CREATE TABLE comments_votes (
    comment_id INT,
    user_id INT,
    vote_type INT,
    PRIMARY KEY (comment_id, user_id)
);

comments_votes テーブルは複合主キーを使用して、各ユーザーが特定のコメントに対して 1 回だけ投票できるようにします。

サンプル データ

-- Insert sample data
INSERT INTO comments VALUES (1, 'First comment');
INSERT INTO comments VALUES (2, 'Second comment');
INSERT INTO comments VALUES (3, 'Third comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');
INSERT INTO users VALUES (3, 'user_c');

-- Record user 1's votes
INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);

利点

このアプローチにはいくつかの利点があります。

  • 複数の投票: comments_votes テーブルの主キー制約により、参照整合性が強制され、データが保証されます。一貫性。
  • 柔軟な投票タイプ: vote_type 列では、好きか嫌いなど、さまざまな種類の投票が可能です。
  • クエリが簡単:リレーショナル モデルにより、投票者情報と投票数の効率的なクエリが可能になります。

外部キー制約(オプション)

さらに、テーブル間の参照整合性を強制するために外部キー制約を追加できます:

CREATE TABLE comments (
    ...
) ENGINE=INNODB;

CREATE TABLE users (
    ...
) ENGINE=INNODB;

CREATE TABLE comments_votes (
    ...
    FOREIGN KEY (comment_id) REFERENCES comments (comment_id),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;

このリレーショナル データベース設計を利用すると、MySQL に配列を保存することなく、多重投票を効果的に防止し、データの整合性を維持できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3