Armazenando matrizes no MySQL: uma abordagem alternativa para evitar votações múltiplas
O MySQL nativamente não suporta o armazenamento de matrizes dentro de campos. No entanto, um design de banco de dados relacional pode ser empregado para obter um resultado semelhante.
Design de banco de dados
Considere o seguinte esquema de banco de dados:
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)
);
A tabela comments_votes usa uma chave primária composta para garantir que cada usuário possa votar apenas uma vez em um determinado comentário.
Dados de exemplo
-- 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);
Benefícios
Essa abordagem tem diversas vantagens:
Restrições de chave estrangeira (Opcional)
Além disso, restrições de chave estrangeira podem ser adicionadas para impor a integridade referencial entre as tabelas:
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;
Ao utilizar esse design de banco de dados relacional, você pode efetivamente evitar votações múltiplas e manter a integridade dos dados sem a necessidade de armazenar matrizes no MySQL.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3