CREATE TABLE member ( // 회원 테이블
id VARCHAR(50) NOT NULL PRIMARY KEY, // id
name VARCHAR(30) NOT NULL, // 이름
birthday DATE NOT NULL, // 생일
password VARCHAR(250) NOT NULL // 비밀번호
);
식별 될 수 있는 키는 id 뿐이라서 id를 기본키로 잡아줬다.
CREATE TABLE board ( // 게시판 테이블
`bno` INT NOT NULL AUTO_INCREMENT, // 게시글 번호
`fno` INT NOT NULL, // 파일 번호
`title` VARCHAR(30) NOT NULL, // 제목
`id` VARCHAR(30) NOT NULL, // 글쓴이
`content` VARCHAR(5000) NOT NULL, // 내용
`viewcount` INT NOT NULL, // 조회수
`created_date` TIMESTAMP NOT NULL, // 작성일
`updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, // 수정일
PRIMARY KEY (`bno`));
bno 로 게시글 상세, 삭제, 수정을 하기 위해 bno(게시글의 번호)를 기본키로 잡아줬다.
++ 수정일 추가함 / 파일 번호 추가해서 파일 번호 참조
CREATE TABLE files ( // 파일 테이블
`fno` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, //파일 번호
`up_file` VARChar(200) NOT NULL, //업로드 된 파일 이름
`org_file` VARCHAR(100) NOT NULL, //원래 파일 이름
`file_group` VARCHAR(30) // 파일 여러개 올리면 저장할 컬럼
);
파일 테이블을 따로 만들었고, bno 를 외래키로 설정했다. board의 bno을 참조해서 둘의 값이 달라지지 않도록 했다. bno도 수정,삭제,조회 등에 사용할 것임
++ 외래키 쓰면 불편해서 없애기로 했고 board 가 fno 를 참조하는 구조로 변경 하기로 했다
CREATE TABLE comments ( // 댓글 테이블
cno INT NOT NULL AUTO_INCREMENT PRIMARY KEY, //댓글 번호
bno INT NOT NULL, //댓글이 달린 게시물의 번호
parent_cno INT NULL, //부모 댓글 번호
content TEXT NOT NULL, //댓글 내용
id VARCHAR(30), //댓글 쓴 사람
comment_date TIMESTAMP NOT NULL DEFAULT NOW(), // 댓글 쓴 날짜
depth INT NOT NULL, //댓글 깊이 (레벨)
created_date TIMESTAMP NOT NULL, // 작성일
updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; // 수정일
);
하... 댓글 짜증나... DB 짜는데 머리 터졌다.
depth 로 댓글의 댓글/댓글의 대댓글/대댓글의 댓글... 댓슈탈트붕괴현상...
여튼 그런 걸 쉽게 표현 하고자 depth 컬럼을 넣어줌
또한 댓글의 댓글을 달 경우 참조 할 parent_cno 컬럼도 넣어줬다.
댓글의 댓글을 달려면 원댓글 번호가 parent가 되어야 하니까? 뭔?말인?지? 나?도 모르?겠다ㅎㅎ
op.gg 의 커뮤니티 부분을 구현하기 위해 CRUD 와 관련된 DB를 설계했고, 라이엇 api 에서 받아올 data 들은 DB에 저장할지 말지 모르겠어서 설계하지 않았다.
퍼블리싱+프론트를 만지작..거리고는 있는데 그냥 사이트 구조부터 설계하고 제일 어려운 것 부터 해야겠다.
오라클용
CREATE TABLE board (
bno INT PRIMARY KEY,
fno INT NOT NULL,
title VARCHAR2(30) NOT NULL,
id VARCHAR2(30) NOT NULL,
content VARCHAR2(5000) NOT NULL,
viewcount INT NOT NULL,
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_date TIMESTAMP
);
CREATE SEQUENCE board_seq START WITH 1;
CREATE TRIGGER board_trigger
BEFORE INSERT ON board
FOR EACH ROW
BEGIN
SELECT board_seq.NEXTVAL INTO :new.bno FROM dual;
END;
/
CREATE TABLE files (
fno INT PRIMARY KEY,
stored_file VARCHAR2(200) NOT NULL,
org_file VARCHAR2(200) NOT NULL
);
CREATE SEQUENCE files_seq START WITH 1;
CREATE TRIGGER files_trigger
BEFORE INSERT ON files
FOR EACH ROW
BEGIN
SELECT files_seq.NEXTVAL INTO :new.fno FROM dual;
END;
/
CREATE TABLE member (
id VARCHAR2(50) PRIMARY KEY,
name VARCHAR2(30) NOT NULL,
birthday DATE NOT NULL,
password VARCHAR2(250) NOT NULL
);