ユーザー配列を MySQL に効率的に保存する方法: ダイレクト ストレージのより良い代替手段?
Nov 04, 2024 pm 07:26 PMMySQL にユーザー配列を効率的に保存する方法: より良い代替案
はじめに
コメント評価システムで複数のユーザーの投票を防ぐには、すでに投票したユーザー 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 サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?
