在 MySQL 中儲存陣列:防止多重投票的另一種方法
MySQL 本身不支援在欄位中儲存陣列。但是,可以採用關聯式資料庫設計來實現類似的結果。
資料庫設計
考慮以下資料庫架構:
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)
);
comments_votes 表使用複合主鍵來確保每個使用者只能對給定評論投票一次。
範例資料
-- 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);
好處
這種方法有幾個優點:
外鍵約束(可選)
此外,可以添加外鍵約束以強製表之間的引用完整性:
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;
利用這種關係型資料庫設計,可以有效防止多重投票並保持資料完整性,而無需在 MySQL 中儲存數組。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3