MySQL에 배열 저장: 대체 접근 방식
댓글 평가 시스템에서 다중 투표를 방지하려면 사용자 배열을 저장하려고 합니다. MySQL 필드의 ID입니다. 이는 MySQL에서 직접 지원되지 않지만 다음과 같은 대체 접근 방식을 고려하십시오.
데이터베이스 스키마
세 개의 테이블 생성:
-
comments: 댓글 ID와 본문을 포함합니다.
-
users: 사용자 ID와 사용자 이름을 저장합니다.
-
comments_votes: 댓글을 사용자에게 링크합니다. 투표 유형을 포함하여 투표한 사람
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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)
);
|
로그인 후 복사
예시 데이터
1 2 3 4 5 6 7 8 | INSERT INTO comments VALUES (1, 'first comment' );
INSERT INTO comments VALUES (2, 'second comment' );
INSERT INTO users VALUES (1, 'user_a' );
INSERT INTO users VALUES (2, 'user_b' );
INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);
|
로그인 후 복사
사용자 자격 확인
사용자가 특정 댓글에 이미 투표했는지 확인하려면 간단한 쿼리를 사용하세요.
1 | SELECT COUNT (*) FROM comments_votes WHERE comment_id = <comment id> AND user_id = <user id>;
|
로그인 후 복사
이 접근 방식은 comments_votes 테이블의 기본 키 제약 조건이 고유성을 보장하므로 여러 투표를 방지합니다.
복수 투표 방지
사용자가 이미 투표한 경우 쿼리 결과에 따라 시스템 로직에서 투표 아이콘을 비활성화합니다.
이 접근 방식의 장점
- 외래 키 제약 조건을 통해 데이터 무결성을 보장합니다.
- 배열을 단일 필드로 직렬화할 필요가 없습니다.
- 데이터베이스 단순화 운영하고 데이터 손상 위험을 줄입니다.
위 내용은 MySQL에 배열을 저장하지 않고 댓글 평가 시스템에서 다중 투표를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!