내 사이트, 사용자 및 게스트에 두 가지 유형의 사람들이 있습니다. 실제로 생성/인증 프로세스를 제외하고는 동일합니다. 순간 데이터베이스 디자인 : 사용자 및 게스트
나는 두 개의 테이블이 있습니다t_users
userId[PRIMARY, AUTOINC] username[UNIQUE]
t_guests
guestId[PRIMARY, AUTOINC] userId
누군가가 사이트를 입력하면 스크립트는 다음을
1) t_guests에 새 행을 삽입하여 새로운 고객 레코드를 작성
2) 이전 단계에서 생성 된 guestId를 사용하여 새 레코드를 t_users에 추가합니다 (guest username = "Guest guestId")
3) 게스트 레코드 설정 u 두 번째 단계에서 할당 된 서버 번호
많은 데이터베이스 취약점을 포함하고 있기 때문에이 데이터베이스 디자인이 끔찍하다고 생각합니다. 예를 들어 사용자 이름 "Guest xyz"가 t_users 테이블에 이미있는 경우 2 단계는 실패하고 3 단계는 userId에 잘못된 값을 할당합니다 (구현에 따라 0 또는 guestId가 1 단계에서 할당 됨).
실제로 저는 손님을 위해 고유 한 사용자 이름을 생성하기 위해 자동 증가 기능을위한 t_guests 테이블 만 필요합니다. 단일 쿼리를 사용하여 하나의 통합 테이블을 사용하고 게스트를 등록하는 방법이 있습니까?
업데이트 : 나는 하나의 테이블에 손님을 삽입하기 위해 다음을 수행 할 수 있습니다 :
SELECT @mg := IFNULL(MAX(guestId), 0) + 1 FROM t_users;
INSERT INTO t_users (guestId) VALUES(@mg);
하지만 아무도 그 두 실행 사이에 t_users에 새로운 게스트 기록을 삽입 없다는 것을 확신 할 수 없다 진술. 그리고 나는 실제 사용자가 0이되도록 guestId를 유일하게 만들 수 없습니다.
'사용자'테이블에'type' 열을 추가하고 사용자 유형 ('user','guest','admin' 등)을 지정하지 않는 이유는 무엇입니까? – Blender
"type"열은 옵션이지만 명명 문제를 해결하지 못합니다. 게스트 이름을 Guest 1, Guest 2, Guest 3 등으로 지정합니다. –