如何在 MySQL 中高效地儲存使用者數組:直接儲存的更好替代方案?

Mary-Kate Olsen
發布: 2024-11-04 19:26:02
原創
461 人瀏覽過

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

如何在MySQL 中高效存儲用戶數組:更好的替代方案

簡介

至為了防止評論評級系統中出現多個用戶投票,必須儲存已投票的用戶ID 陣列。然而,將數組直接儲存在 MySQL 欄位中可能會出現問題,並可能導致資料一致性問題。本文探討了一種更有效的替代方案,可確保引用完整性並防止孤立行。

建立規範化關係表

不要將陣列儲存在單一欄位中,而是建立以下內容規範化關係表:

  • 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板