롤 전적 사이트 구현 - DB 설계

essential·2023년 8월 16일
0

op.gg

목록 보기
2/16

회원 DB 설계

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를 기본키로 잡아줬다.


게시판 글 DB 설계

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(게시글의 번호)를 기본키로 잡아줬다.
++ 수정일 추가함 / 파일 번호 추가해서 파일 번호 참조


게시판 글 파일 DB 설계

 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 를 참조하는 구조로 변경 하기로 했다


게시판 댓글 DB 설계

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
        );
profile
essential

0개의 댓글