게시판 CRUD DB 정리

Jehyun·2023년 3월 6일
0

BoardService

목록 보기
4/4

게시판 CURD의 DB 진행과정 및 오류, 문제점 정리

개발 환경 - Oracle SQL Developer

1. 설계

처음 게시판CRUD를 만들기에 앞서서 어떤 기능들이 필요한지 생각한 결과

회원정보

게시판

댓글

DB를 설계할 때에는 id를 직접 들어내는 방식 보다는 이름이나 닉네임이 적당하고 생각해서 member table에 nickName column을 추가 했지만 PK로 설정하지 않았고, 다른 table에서도 PK인 id값을 reference 하는 이상한 형태의 DB가 나타났다.
당시에는 column을 수정하는 법도 모르고 내가 생각했던 구조와 달라서 테이블들을 어떻게 풀어서 다시 설정해줘야할 지 몰랐다. 그래서 모든 table를 drop 시키고 create 하는 바보같은 일을 3~4번 반복했다. 또한 저장을 안해서 컬럼을 하나씩 빼먹는 경우도 존재했다 그래서 table의 수정법을 공부했다.

2. Oracle table 추가 / 수정 / 삭제

이후에 테이블을 계속해서 삭제 하고 create 하려고 하니 너무 말도 안되는 짓이라 생각하고 수정방법을 공부 하기로 했다.

Oracle의 테이블 구조 변경 명령어 'ALTER'

  • 추가/수정/삭제/rename
  1. add

    • ALTER TABLE 'TABLE 명' ADD (id varchar2(20), pw varchar2(20) ... )
      varchar2형태의 id,pw를 추가
  2. modify

    • ALTER TABLE 'TABLE 명' MODIFY (tel number(15))
      tel의 자료형을 number(15)로 변경
      ※ modify의 경우 내부에 데이터가 변경하려는 자료형과 일치 하지 않을 경우에는 변경이 안될 수도 있다.
  3. delete

    • ALTER TABLE 'TABLE 명' test drop column id;
      해당 테이블의 id column을 삭제
  4. rename

    • ALTER TABLE '기존 TABLE 명' RENAME TO '변경 TABLE 명'
  • PK(primary key), FK(foreign key) 추가/변경/삭제
    - ALTER TABLE 'TABLE 명' DROP primary key - 해당 table의 PK 삭제
    - ALTER TABLE 'TABLE 명' DROP CONSTRAINT '제약조건명'

※ 제약조건명에서 멈칫한 부분이 있어서 추가

제약조건명이란 CONSTRAINT설정 당시 부여하는 이름인데 CONSTRAINT명 없이 FOREIGN KEY 설정 당시
create table OOO(
...
FOREIGN KEY(COLUMN NAME) REFERENCES '부모테이블 명(PK)')
으로 설정할 경우 제약조건명이 존재하지 않게 되고 수정이 불가능하다

그래서 CONSTRAINT 설정의 경우 TABLE CREATE 내에서 진행하기 보다는 TABLE을 우선 만들고 이후에 ALTER 명령어를 통해서 추가로 지정해주는 것이 좋다
ex) ALTER TABLE 'TABLE 명'ADD CONSTRAINT'constraint_name'
FOREIGN KEY(KEY값) REFERENCES '부모테이블 명(PK)';


constraint_name이 존재하지 않기 때문에 FK의 수정이 불가능 한 것을 볼 수 있다.

따라서 제약 조건의 경우 TABLE 생성이후 alter 값을 이용하여 지정하도록 하고 constraint_name의 경우에는 해당 table의 명의 이름을 가져와 어떤 제약인지 표현하는 것이 좋다.

ex) alter table part2 constraint 'part2_fk' Foreign key(writer) ...

3. 결론

DB의 경우 설계부터 잘못됐을 경우 E-R 다이어그램도 잘못된 형태로 생성되고 제약명 혹은 제약조건을 잘못 설정했을 경우 drop 시키는 것도 오랜 시간이 걸리게 된다. 따라서 자신이 생각하는 E-R 다이어그램을 그림으로 그리거나 GUI 환경을 토대로 설정하는 것이 좋으며 DB의 수정은 최소화 하는 것이 가장 좋은 방법이다.


※ 아 그리고 PK를 2개 지정하는 방법은 create 당시 primary key(a,b)형태로 만들 경우 2개 이상으로 지정이 가능하다. 하지만 primary key(a),primary key(b)와 같은 형태로 생성은 불가능하다
진짜 -끝-

profile
주니어 개발자

0개의 댓글