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>
利点
このアプローチにはいくつかの利点があります。
外部キー制約 (オプション)
さらに、外部キー制約を追加して、外部キー制約を追加して、相互間の参照整合性を強制できます。テーブル:
<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 サイトの他の関連記事を参照してください。