如何在MySQL 中高效存儲用戶數組:更好的替代方案
簡介
至為了防止評論評級系統中出現多個用戶投票,必須儲存已投票的用戶ID 陣列。然而,將數組直接儲存在 MySQL 欄位中可能會出現問題,並可能導致資料一致性問題。本文探討了一種更有效的替代方案,可確保引用完整性並防止孤立行。
建立規範化關係表
不要將陣列儲存在單一欄位中,而是建立以下內容規範化關係表:
強制引用完整性
至確保資料一致性,向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中文網其他相關文章!