CREATE TABLE chat_room ( cid CHAR(16) NOT NULL PRIMARY KEY, -- 채팅방 구분 코드: 6(bid) + 6(yyyyMMdd) + 4(숫자 카운트) bid CHAR(6) NOT NULL, -- 학원 구분 코드 name TEXT NOT NULL, -- 채팅방 이름 type CHAR(4) NOT NULL, -- 채팅방 유형 (1:1, 그룹 등) create_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 생성 일자 open_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 오픈 일자 close_date DATETIME, -- 중지 일자 (채팅방 종료 처리) FOREIGN KEY (bid) REFERENCES academy (bid) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE chat_join ( cid CHAR(16) NOT NULL, -- 채팅방 구분 코드 uid VARCHAR(70) NOT NULL, -- 사용자 구분 코드 join_date DATETIME NOT NULL, -- 채팅방 입장 시간 mid CHAR(36), -- 마지막 확인한 메시지 ID is_notice BOOLEAN DEFAULT TRUE, -- 알림 설정 여부 PRIMARY KEY (cid, uid), FOREIGN KEY (cid) REFERENCES chat_room (cid) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (uid) REFERENCES user (uid) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (mid) REFERENCES chat_message (mid) ON UPDATE CASCADE ); CREATE TABLE chat_message ( mid CHAR(36) NOT NULL PRIMARY KEY, -- 메시지 구분 코드(UUID) cid CHAR(16) NOT NULL, -- 채팅방 구분 코드 uid VARCHAR(70) NOT NULL, -- 사용자 구분 코드 create_date DATETIME NOT NULL, -- 메시지 작성 일자 content TEXT NOT NULL, -- 메시지 내용 is_hidden BOOLEAN NOT NULL DEFAULT FALSE, -- 가리기 여부 media_url TEXT, -- 첨부 파일 링크 read_count INT NOT NULL DEFAULT 0, -- 읽은 사람 수 blind BOOLEAN NOT NULL DEFAULT FALSE, -- 신고로 인해 블라인드 처리 여부 check_report BOOLEAN NOT NULL DEFAULT FALSE, -- 신고 검토 여부 FOREIGN KEY (cid) REFERENCES chat_room (cid) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (uid) REFERENCES user (uid) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX idx_chat_message_cid ON chat_message(cid); CREATE INDEX idx_chat_message_cid_create_date ON chat_message(cid, create_date); CREATE INDEX idx_chat_message_uid_cid ON chat_message(uid, cid); CREATE TABLE report_list ( cid CHAR(16) NOT NULL, -- 채팅방 구분 코드 uid VARCHAR(70) NOT NULL, -- 신고자 사용자 코드 mid CHAR(36) NOT NULL, -- 신고된 메시지 ID report TEXT, -- 신고 사유 PRIMARY KEY (cid, uid, mid), FOREIGN KEY (cid) REFERENCES chat_room (cid) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (uid) REFERENCES user (uid) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (mid) REFERENCES chat_message (mid) ON DELETE CASCADE ON UPDATE CASCADE );