MySQL을 사용하여 댓글 평가 시스템에서 다중 투표를 방지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 22:00:03
원래의
1076명이 탐색했습니다.

How to Prevent Multiple Votes in a Comment Rating System Using MySQL?

투표 시스템을 위해 MySQL에 배열 저장

댓글 평가 시스템에서 다중 투표를 방지하기 위해 사용자 ID 배열을 MySQL에 저장할 수 있습니다. . 교차 테이블을 사용하여 이를 달성하는 방법은 다음과 같습니다.

데이터베이스 스키마

<code class="sql">CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
);

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
);

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id)
);</code>
로그인 후 복사

데이터 삽입

<code class="sql">INSERT INTO comments VALUES (1, 'first comment');
INSERT INTO users VALUES (1, 'user_a');
INSERT INTO comments_votes VALUES (1, 1, 1);</code>
로그인 후 복사

comments_votes 테이블에는 댓글 ID, 사용자 ID 및 투표 유형이 저장됩니다. 복합 기본 키는 동일한 댓글에 대한 중복 투표를 방지합니다.

외래 키 제약 조건

참조 무결성을 보장하고 고아 행을 방지하려면:

<code class="sql">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;</code>
로그인 후 복사

이렇게 하면 comments_votes 행이 항상 기존 댓글을 참조하고 user.

교차 테이블의 이점

교차 테이블을 사용하면 다음과 같은 문제를 피할 수 있습니다.

  • 직렬화된 배열에서 참조 무결성을 적용하는 데 어려움이 있습니다.
  • 배열의 일부가 손상되면 데이터가 손상될 가능성이 있습니다. 손상되었습니다.
  • 댓글과 투표를 위한 별도의 테이블에 비해 색인 효율성이 감소합니다.

위 내용은 MySQL을 사용하여 댓글 평가 시스템에서 다중 투표를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿