在 MySQL 中儲存陣列:防止多重投票的另一種方法
MySQL 本身不支援在欄位中儲存陣列。但是,可以採用關聯式資料庫設計來實現類似的結果。
資料庫設計
考慮以下資料庫模式:
<code class="sql">CREATE TABLE comments ( comment_id INT PRIMARY KEY, body VARCHAR(100) ); CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(20) ); CREATE TABLE comments_votes ( comment_id INT, user_id INT, vote_type INT, PRIMARY KEY (comment_id, user_id) );</code>
comments_votes 表使用複合主鍵來確保每個使用者只能對給定評論投票一次。
示例數據
<code class="sql">-- Insert sample data INSERT INTO comments VALUES (1, 'First comment'); INSERT INTO comments VALUES (2, 'Second comment'); INSERT INTO comments VALUES (3, 'Third comment'); INSERT INTO users VALUES (1, 'user_a'); INSERT INTO users VALUES (2, 'user_b'); INSERT INTO users VALUES (3, 'user_c'); -- Record user 1's votes INSERT INTO comments_votes VALUES (1, 1, 1); INSERT INTO comments_votes VALUES (2, 1, 1);</code>
好處
這種方法有幾個優點:
外鍵約束(可選)
此外,可以添加外鍵約束以強制之間的引用完整性表:
<code class="sql">CREATE TABLE comments ( ... ) ENGINE=INNODB; CREATE TABLE users ( ... ) ENGINE=INNODB; CREATE TABLE comments_votes ( ... FOREIGN KEY (comment_id) REFERENCES comments (comment_id), FOREIGN KEY (user_id) REFERENCES users (user_id) ) ENGINE=INNODB;</code>
利用這種關聯式資料庫設計,您可以有效防止多重投票並保持資料完整性,而無需在MySQL 中儲存陣列。
以上是如何在MySQL中不儲存數組的情況下防止多重投票?的詳細內容。更多資訊請關注PHP中文網其他相關文章!