- Published on
24.02.01 이찬우 회고
- Authors
- Name
- 이찬우

아직 기획서가 나오지 않은 상태이지만, 아무것도 하지 않고 기다릴 수는 없으니 지금까지 회의에서 나온 아이디어를 바탕으로 DB설계를 해보도록 하였습니다.
CREATE TABLE TB_USER(
USER_ID VARCHAR(30) PRIMARY KEY,
PASSWORD VARCHAR(1000) NOT NULL,
EMAIL VARCHAR(50) UNIQUE NOT NULL,
SALT VARCHAR(500) NOT NULL,
NICKNAME VARCHAR(20) NOT NULL,
REFRESH_TOKEN VARCHAR(1000),
CREATE_DATE DATETIME DEFAULT CURRENT_TIMESTAMP,
LASTEST_LOGIN DATETIME DEFAULT CURRENT_TIMESTAMP
);
유저 테이블(TB_USER)
유저 정보를 저장하는 테이블입니다.
- USER_ID: 유저의 아이디 칼럼입니다. primary key를 주었습니다.
- PASSWORD: 유저의 비밀번호를 저장하는 칼럼으로, NOT NULL 제약조건이 걸려 있습니다.
- EMAIL: 유저의 이메일 주소를 저장하는 칼럼으로, UNIQUE 제약조건이 걸려 있습니다. NOT NULL 제약조건도 적용되어 있습니다. 비밀번호 변경이나 아이디 찾기에 사용할 수 있도록 회원가입 시 입력받도록 만들었지만, 실제로 비밀번호 변경이나 아이디 찾기를 구현할 시간적 여유가 있을지 알 수 없습니다.
- SALT: 비밀번호 해싱 시 사용되는 무작위 문자열을 저장하는 칼럼으로, NOT NULL 제약조건을 걸었습니다.
- NICKNAME: 유저의 닉네임을 저장하는 칼럼으로, NOT NULL 제약조건을 걸었습니다.
- REFRESH_TOKEN: 유저의 리프레시 토큰을 저장하는 칼럼입니다. VARCHAR(1000)으로 길이제한에 걸리지 않을지 걱정이 됩니다.
- CREATE_DATE: 유저 계정 생성일을 저장하는 칼럼으로, 기본값으로 현재 시간을 설정하였습니다.
- LATEST_LOGIN: 유저의 최근 로그인 시간을 저장하는 칼럼으로, 기본값으로 현재 시간이 설정되어 있습니다. 리프레시토큰을 저장할 때 같이 업데이트 되도록 설정하면 좋을 것 같습니다.
CREATE TABLE TB_ATTENDANCE(
USER_ID VARCHAR(30) NOT NULL,
ATT_DATE DATETIME DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT FK_ATTENDANCE_USER
FOREIGN KEY (USER_ID)
REFERENCES TB_USER(USER_ID)
ON DELETE CASCADE
);
출석 테이블 (TB_ATTENDANCE)
유저의 출석 정보를 저장하는 테이블입니다.
- USER_ID: 출석 정보와 연결된 유저의 아이디 칼럼으로, NOT NULL 제약조건이 걸려 있습니다.
- ATT_DATE: 출석 일자를 저장하는 칼럼으로, 기본값으로 현재 시간이 설정되어 있습니다.
- FOREIGN KEY (USER_ID): TB_USER 테이블의 USER_ID와 외래키 관계를 형성하였습니다.
- ON DELETE CASCADE: 유저가 삭제되면 해당 유저의 모든 ATTENDANCE 데이터도 함께 삭제되도록 설정하였습니다.
CREATE TABLE TB_FRIEND_REQUEST(
FRIEND_REQUEST_ID INT PRIMARY KEY AUTO_INCREMENT,
FROM_USER VARCHAR(30) NOT NULL,
TO_USER VARCHAR(30) NOT NULL,
IS_FRIEND BOOL NOT NULL DEFAULT FALSE,
CREATE_DATE DATETIME DEFAULT CURRENT_TIMESTAMP,
COMPLY_DATE DATETIME NULL,
CONSTRAINT FK_FRIEND_FROM_USER
FOREIGN KEY (FROM_USER)
REFERENCES TB_USER(USER_ID)
ON DELETE CASCADE,
CONSTRAINT FK_FRIEND_TO_USER
FOREIGN KEY (TO_USER)
REFERENCES TB_USER(USER_ID)
ON DELETE CASCADE
);
TB_FRIEND_REQUEST 테이블
친구 신청 및 친구관계를 보여주는 테이블입니다.
- FRIEND_REQUEST_ID: 친구 요청을 식별하는 고유한 번호로, 자동으로 증가합니다.
- FROM_USER: 친구 요청을 보내는 사용자의 아이디입니다.
- TO_USER: 친구 요청을 받는 사용자의 아이디입니다.
- IS_FRIEND: 친구 요청의 수락 여부를 나타내는 불린 값으로, 기본값은 거짓(FALSE)입니다.
- CREATE_DATE: 친구 요청이 생성된 일시를 저장하는 칼럼으로, 기본값으로 현재 시간이 설정되어 있습니다.
- COMPLY_DATE: 친구 요청이 수락된 일시를 저장하는 칼럼으로, 수락되지 않았으면 NULL입니다.
- FOREIGN KEY (FROM_USER): TB_USER 테이블의 USER_ID와 외래키 관계를 형성하고 있습니다. REFERENCES TB_USER(USER_ID ON DELETE CASCADE: FROM_USER가 삭제되면 해당 사용자와 관련된 친구 요청도 함께 삭제됩니다.
- FOREIGN KEY (TO_USER): TB_USER 테이블의 USER_ID와 외래키 관계를 형성하고 있습니다. REFERENCES TB_USER(USER_ID) ON DELETE CASCADE: TO_USER가 삭제되면 해당 사용자와 관련된 친구 요청도 함께 삭제됩니다.
CREATE TABLE TB_ITEM(
ITEM_ID INT PRIMARY KEY AUTO_INCREMENT,
ITEM_NAME VARCHAR(20),
ITEM_TYPE VARCHAR(20),
ITEM_DESCRIPTION VARCHAR(200)
);
상품 테이블(TB_ITEM)
상품 정보를 저장하는 테이블입니다.
이 테이블은 주로 상품 관리에 사용되며, 각 상품은 고유한 ITEM_ID를 가지고 있습니다.
- ITEM_ID: 상품을 식별하는 고유한 번호로, 자동으로 증가합니다.
- ITEM_NAME: 상품의 이름을 저장하는 칼럼입니다.
- ITEM_TYPE: 상품의 유형을 저장하는 칼럼입니다.
- ITEM_DESCRIPTION: 상품에 대한 설명을 저장하는 칼럼입니다.
CREATE TABLE TB_INVENTORY(
INVENTORY_ID INT PRIMARY KEY AUTO_INCREMENT,
USER_ID VARCHAR(30) NOT NULL,
ITEM_ID INT NOT NULL,
CONSTRAINT FK_INVENTORY_USER
FOREIGN KEY (USER_ID)
REFERENCES TB_USER(USER_ID)
ON DELETE CASCADE,
CONSTRAINT FK_INVENTORY_ITEM
FOREIGN KEY (ITEM_ID)
REFERENCES TB_ITEM(ITEM_ID)
ON DELETE CASCADE
);
인벤토리 테이블(TB_INVENTORY)
사용자의 인벤토리 정보를 저장하는 테이블입니다.
이 테이블은 사용자가 보유한 상품들을 추적하는 데 사용됩니다.
- INVENTORY_ID: 인벤토리를 식별하는 고유한 번호로, 자동으로 증가합니다.
- USER_ID: 해당 인벤토리에 속한 사용자의 아이디입니다. 외래키 제약조건이 걸려 있으며, 사용자가 삭제되면 인벤토리 데이터도 함께 삭제됩니다.
- ITEM_ID: 해당 인벤토리에 속한 상품의 식별 번호입니다. 외래키 제약조건이 걸려 있으며, 상품이 삭제되면 인벤토리 데이터도 함께 삭제됩니다.
CREATE TABLE TB_SHOP(
SHOP_ID INT PRIMARY KEY AUTO_INCREMENT,
SHOP_ITEM_ID INT NOT NULL,
SHOP_ITEM_PRICE INT NOT NULL,
SALES_START_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
SALES_END_DATE DATETIME NOT NULL,
CONSTRAINT FK_SHOP_ITEM
FOREIGN KEY (SHOP_ITEM_ID)
REFERENCES TB_ITEM(ITEM_ID)
ON DELETE CASCADE
);
상점 테이블(TB_SHOP)에 대한 설명
상점에서 판매되는 상품 정보를 저장하는 테이블입니다.
- SHOP_ID: 상점 항목을 식별하는 고유한 번호로, 자동으로 증가합니다.
- SHOP_ITEM_ID: 상점에 등록된 상품의 식별 번호로, 외래키 제약조건이 걸려 있습니다. REFERENCES TB_ITEM(ITEM_ID): 외래키가 참조하는 테이블과 칼럼을 지정합니다. ON DELETE CASCADE: 상품이 삭제되면 해당 상품과 관련된 상점 데이터도 함께 삭제됩니다.
- SHOP_ITEM_PRICE: 상품의 가격을 나타내는 칼럼입니다.
- SALES_START_DATE: 상품의 판매 시작일시를 나타내는 칼럼으로, 기본값으로 현재 시간이 설정되어 있습니다.
- SALES_END_DATE: 상품의 판매 종료일시를 나타내는 칼럼입니다.
RESULT_ID INT PRIMARY KEY AUTO_INCREMENT,
USER_ID VARCHAR(30) NOT NULL,
ROLE_ID INT NOT NULL,
IS_WIN TINYINT NOT NULL DEFAULT 0,
PLAY_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT FK_RESULT_USER
FOREIGN KEY (USER_ID)
REFERENCES TB_USER(USER_ID),
ON DELETE CASCADE
CONSTRAINT FK_RESULT_ROLE
FOREIGN KEY (ROLE_ID)
REFERENCES TB_ROLE(ROLE_ID)
ON DELETE CASCADE
);
결과 테이블(TB_RESULT)에 대한 설명
사용자가 참여한 게임의 결과를 저장하는 테이블입니다.
- RESULT_ID: 결과 항목을 식별하는 고유한 번호로, 자동으로 증가합니다.
- USER_ID: 결과에 참여한 사용자의 아이디입니다. 외래키 제약조건이 걸려 있어서, 사용자가 삭제되면 결과 데이터도 함께 삭제됩니다.
- ROLE_ID: 결과에 할당된 역할의 식별 번호입니다. 외래키 제약조건이 걸려 있어서, 역할이 삭제되면 결과 데이터도 함께 삭제됩니다.
- IS_WIN: 결과가 승리인지 여부를 나타내는 작은 정수로, 기본값은 0입니다. (0: 패배, 1: 승리)
- PLAY_DATE: 결과가 기록된 날짜 및 시간입니다. 기본값으로 현재 시간이 설정되어 있습니다.
CREATE TABLE TB_ROLE(
ROLE_ID INT PRIMARY KEY AUTO_INCREMENT,
ROLE_NAME VARCHAR(10) NOT NULL UNIQUE
);
역할 테이블(TB_ROLE)에 대한 설명
사용자 역할 정보를 저장하는 테이블입니다.
- ROLE_ID: 역할을 식별하는 고유한 번호로, 자동으로 증가합니다.
- ROLE_NAME: 역할의 이름을 저장하는 칼럼으로, NOT NULL 및 UNIQUE 제약조건이 걸려 있습니다.
일단은 이런 식으로 큰 틀만 만들었습니다. 앞으로 나오는 기획에 따라서 수정하여 사용하면 될 것 같습니다.