ホームページ >データベース >mysql チュートリアル >ユーザー配列を MySQL に効率的に保存する方法: ダイレクト ストレージのより良い代替手段?

ユーザー配列を MySQL に効率的に保存する方法: ダイレクト ストレージのより良い代替手段?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 19:26:02496ブラウズ

How to Efficiently Store User Arrays in MySQL: A Better Alternative to Direct Storage?

MySQL にユーザー配列を効率的に保存する方法: より良い代替案

はじめに

コメント評価システムで複数のユーザーの投票を防ぐには、すでに投票したユーザー ID の配列を保存することが不可欠です。ただし、配列を MySQL フィールドに直接保存すると問題が発生し、データの一貫性の問題が発生する可能性があります。この記事では、参照整合性を確保し、孤立した行を防ぐ、より効率的な代替方法について説明します。

正規化リレーショナル テーブルの作成

配列を 1 つのフィールドに格納する代わりに、次のテーブルを作成します。正規化されたリレーショナル テーブル:

  • comments テーブル: コメント ID とコンテンツを格納します。
  • users テーブル: ユーザー ID とユーザー名を格納します。
  • comments_votes テーブル: コメント ID、ユーザー ID、投票タイプを保存します。

参照整合性の強制

データの一貫性を確保し、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 サイトの他の関連記事を参照してください。

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