ホームページ  >  記事  >  データベース  >  MySQL に配列を保存せずに多重投票を防ぐにはどうすればよいですか?

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

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 11:32:26832ブラウズ

How to Prevent Multiple Voting without Storing Arrays in MySQL?

MySQL での配列の保存: 複数投票を防止するための代替アプローチ

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

データベース設計

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

<code class="sql">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)
);</code>

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

データ例

<code class="sql">-- 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);</code>

利点

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

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

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

さらに、外部キー制約を追加して、外部キー制約を追加して、相互間の参照整合性を強制できます。テーブル:

<code class="sql">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;</code>

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

以上がMySQL に配列を保存せずに多重投票を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。