"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar votações múltiplas sem armazenar matrizes no MySQL?

Como evitar votações múltiplas sem armazenar matrizes no MySQL?

Publicado em 2024-11-22
Navegar:650

How to Prevent Multiple Voting without Storing Arrays in MySQL?

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:

  • Evita votação múltipla: A restrição de chave primária na tabela comments_votes reforça a integridade referencial e garante os dados consistência.
  • Tipo de voto flexível: A coluna vote_type permite diferentes tipos de votos, como gostos ou desgostos.
  • Fácil de consultar: O modelo relacional permite consultas eficientes de informações dos eleitores e contagens de votos.

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.

Tutorial mais recente Mais>

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