<aside> 📌
Mysql DB 접속 방법
mysql -u root -p
password: Dang1216@@
SHOW DATABASES;
USE library_network;
</aside>
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
login_id VARCHAR(50) NOT NULL UNIQUE, -- 로그인 아이디
password VARCHAR(255) NOT NULL, -- 로그인 비밀번호
username VARCHAR(50) NOT NULL, -- 화면에 보여줄 이름(닉네임)
role ENUM('USER', 'ADMIN') NOT NULL DEFAULT 'USER',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE seats (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
floor INT NOT NULL,
room ENUM('A', 'B') NULL, -- 일부 층은 A/B 구분 없음
seat_number VARCHAR(20) NOT NULL,
UNIQUE (floor, room, seat_number)
);
※ room이 NULL일 수 있으므로
UNIQUE (floor, room, seat_number) 는 "NULL은 서로 다른 것으로 취급"됨 → 문제 없음.
CREATE TABLE checkins (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
seat_id BIGINT NOT NULL,
checkin_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
checkout_time TIMESTAMP NULL,
status ENUM('IN_USE', 'AWAY') DEFAULT 'IN_USE',
away_started_at TIMESTAMP NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (seat_id) REFERENCES seats(id)
);
⚠︎ checkins에는 room이 따로 필요 없음 → seat_id만으로 확인 가능.
채팅은 구역별 채팅이므로 floor만 있고 room이 NULL이면 → 층 전체 채팅으로 해석함.
CREATE TABLE chat_messages (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
floor INT NOT NULL,
room ENUM('A', 'B') NULL, -- 해당 층이 A/B 구분 없으면 NULL 채팅방
user_id BIGINT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
role VARCHAR(20) NOT NULL DEFAULT 'USER',
nickname VARCHAR(50) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);