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 テーブルは複合主キーを使用して、各ユーザーが特定のコメントに対して 1 回だけ投票できるようにします。
サンプル データ
-- 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