Хранение массивов в 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)
);
Таблица comment_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