[DB] 에브리타임 유저 , 게시판 디비 설계

2022. 2. 20. 21:08DataBase

반응형
DROP TABLE IF EXISTS boards;
DROP TABLE IF EXISTS users;

CREATE TABLE users(
	u_id SERIAL UNIQUE,
	user_id VARCHAR NOT NULL,
	register TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	UNIQUE (user_id),
	PRIMARY KEY (u_id, user_id)
);

CREATE TABLE boards(
	b_id SERIAL,
	user_id VARCHAR DEFAULT '익명' NOT NULL,
	title VARCHAR NOT NULL,
	content TEXT NOT NULL,
	u_id INTEGER,
	register TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (b_id, u_id),
	FOREIGN KEY(u_id) REFERENCES users(u_id)
);

 

users 테이블

- user_id: 유저 아이디. UNIQUE값으로 데이터값은 유일하다.

 

boards 테이블

- user_id: 유저 아이디. 익명 게시판이므로, 기본적으로 '익명' 이라는 값으로 데이터에 기록이 된다.

- u_id: 자료형은 INTEGER(int)이다. users테이블의 u_id를 외래키로 가리킨다. 익명 게시판이지만, 로그인을 한 유저가 어떤 유저인지는 기본적으로 알아야 하기 때문에 user 테이블의 u_id를 가진다.

                                   

 

 


 

이번에는 user 테이블에서 user의 아이디를 변경 했을때와 탈퇴 했을때

user가 남긴 게시글도 함께 삭제 하는 테이블을 설계 해보자.

DROP TABLE IF EXISTS boards;
DROP TABLE IF EXISTS users;

CREATE TABLE users(
	u_id SERIAL UNIQUE,
	user_id VARCHAR NOT NULL,
	register TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	UNIQUE (user_id),
	PRIMARY KEY (u_id, user_id)
);

CREATE TABLE boards(
	b_id SERIAL,
	user_id VARCHAR DEFAULT '익명' NOT NULL,
	title VARCHAR NOT NULL,
	content TEXT NOT NULL,
	u_id INTEGER,
	register TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (b_id, u_id),
	FOREIGN KEY(user_id) REFERENCES users(user_id) ON UPDATE CASCADE ON DELETE CASCADE,
	FOREIGN KEY(u_id) REFERENCES users(u_id) ON DELETE CASCADE
);

 

반응형