내가 구현할 기능과 DB설계

웹 개발자(백엔드)·2021년 9월 19일
0

게시판

목록 보기
2/2

※주의: 이 게시물을 차례차례 보면서 따라하지마세요. 제가 겪은 역경이 고스란히 시간순서대로 적혀있어서 마지막에 제가 깨달은 교훈이 있답니다. 끝까지 다 읽고 따라하시길 바랍니다.

내가 이 프로젝트를 통해 얻고자 하는것
1. 이미지를 어떻게 테이블에 저장하는지.
2. 페이지네이션을 어떻게 구현하는지.
3. 스프링프레임워크를 이용해서 어떻게 웹사이트를 구현하는지.

이 프로젝트를 통해 얻고 싶은 것
1. sql에서 datetime 다루기

이 프로젝트를 통해 얻을 수 있다고 생각하는 것
1. oracle 다루는 법

이미 구현된 기능
회원 관련 기능:
회원가입, 로그인, 로그아웃, 회원수정, 회원삭제

내가 구현할 기능
게시판 관련 기능:
게시물 등록·수정·삭제·, 게시물 검색
+멤버 관련 기능과 연동

DB 설계

mysql과 oracle 문법이 다르다.
DB를 설계했는데 oracle에는 text타입이 없다.
대신에 CLOB타입이 있는데 이것은 대용량 텍스트 데이터 타입(최대 4Gbyte)이다.
그래서 다시 설계해야한다..

이참에 oracle을 다루는 법을 알기로 했다.
https://www.w3schools.com/sql/sql_foreignkey.asp
이것을 통해 공부했다.

기본 값은 NULL 허용이며, NOT NULL 선언 시 해당 컬럼은 NULL 값을 허용하지 않음.

멤버테이블은

CREATE TABLE member (
 memId VARCHAR2(10) CONSTRAINT memId_pk PRIMARY KEY, 
 memPw VARCHAR2(10), 
 memMail VARCHAR2(15), 
 memPurcNum NUMBER(3) DEFAULT 0 CONSTRAINT memPurNum_ck CHECK (memPurcNum < 3) 
); 

이렇게 돼있는데 CONSTRAINT라는 것이 제약조건이다.
그리고 그 다음에 오는 것이 제약명이고 그 다음에 오는 것이 제약종류이고 그 다음에 오는 것이 칼럼명이다.

제약명을 짓는 요령은

ex) emp1_deptno_fk,emp1_empno_pk

오라클로 테이블을 만드려하니 많이 어렵다.
Oracle 에서는 MySql에 있는 Auto_Increment 기능이 없다.
집에 있는 전공서적이랑 인터넷 참고해서 설계하는중..

다시 설계한 데이터베이스:

CREATE TABLE board (
    board_id  NUMBER             NOT NULL, 
    writer    VARCHAR2(10)    NOT NULL, 
    title     VARCHAR2(45)    NOT NULL, 
    content   CLOB            NOT NULL, 
    writedate   DATE        default sysdate, 
    PRIMARY KEY (board_id)
);

위와 같이 primary key를 만들면 constraintname에 SYS~~로 들어간다. 그래서 되도록이면 CONSTRAINT 제약조건?을 통해 pk_name을 지정해주는게 좋을듯.

create sequence board_seq start with 1 increment by 1 nocache nocycle nomaxvalue;

인덱스를 위와 같이 sequence를 통해 만들어줘야 한다.

alter table board add foreign key(writer) references member(memId);

위에 이것은 board게시판에 외래키를 설정해주는 언어.
굳이 이렇게 따로 안추가하고 테이블을 정의할 때 foreign key를 만들면서 on delete cascade까지 해주면 되는데 나는 이미 테이블을 만들었기 때문에 따로 alter문으로 foreign key를 만들었다.

insert into board values(board_seq.NEXTVAL, 'jeongwons', '테스트', '하이', to_char(sysdate,'yyyy.mm.dd hh24:mi'));

잘 삽입됐다! writedate 타입을 varchar2(30)로 바꿔줬다.
근데 board_id(sequence)가 2부터 나온다. 해결방법은 start with 0로 지정해주면 된다고 한다.

0개의 댓글