MySQL にユーザー配列を効率的に保存する方法: より良い代替案
はじめに
コメント評価システムで複数のユーザーの投票を防ぐには、すでに投票したユーザー ID の配列を保存することが不可欠です。ただし、配列を MySQL フィールドに直接保存すると問題が発生し、データの一貫性の問題が発生する可能性があります。この記事では、参照整合性を確保し、孤立した行を防ぐ、より効率的な代替方法について説明します。
正規化リレーショナル テーブルの作成
配列を 1 つのフィールドに格納する代わりに、次のテーブルを作成します。正規化されたリレーショナル テーブル:
参照整合性の強制
データの一貫性を確保し、comments_votes テーブルに外部キー制約を追加します。
<code class="sql">CREATE TABLE comments_votes ( comment_id INT, user_id INT, vote_type INT, PRIMARY KEY (comment_id, user_id), FOREIGN KEY (comment_id) REFERENCES comments (comment_id), FOREIGN KEY (user_id) REFERENCES users (user_id) ) ENGINE=INNODB;</code>
サンプル データの挿入
テーブルにサンプル データを設定します。
<code class="sql">INSERT INTO comments VALUES (1, 'first comment'); INSERT INTO users VALUES (1, 'user_a'); INSERT INTO comments_votes VALUES (1, 1, 1);</code>
重複投票の防止
重複した投票を挿入しようとすると、一意のインデックスが原因でエラーが発生します:
<code class="sql">INSERT INTO comments_votes VALUES (1, 1, 1); ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'</code>
このアプローチの利点
代替アプローチには、いくつかの利点があります。
結論
配列を格納するよりも単一の MySQL フィールド内のデータを外部キーで正規化されたリレーショナル テーブルを利用することで、より信頼性が高く効率的に配列を処理する方法が提供されます。このアプローチにより、参照整合性が保証され、データの不整合が防止され、パフォーマンスが向上するため、配列をデータベースに保存および管理する必要があるシナリオにとって理想的なソリューションとなります。
以上がユーザー配列を MySQL に効率的に保存する方法: ダイレクト ストレージのより良い代替手段?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。