---
title: "오라클 DBMS 정리 16"
date: "2018-11-12"
tags: ["오라클DBMS"]
status: archived
verified: false
---

## 오라클 DBMS 정리 16 - 설계 문서작성, ERD, 정규화 

---


### 이전까지 학습 정리
* **SQL**
  * **쿼리문 실행**
  * DDL : CREATE, DROP, ALTER, TRUNCATE
    * TABLE, USER, INDEX, SYNONYM, SEQUENCE, VIEW 
  * DCL : COMMIT, ROLLBACK, GRANT, REVOKE
    * Transaction, 권한부여
  * DML : INSERT, UPDATE, DELETE, SELECT
* **PL/SQL**
  * **쿼리문 실행 + 제어**
    * 절차적 언어
  * 기본문법, CURSOR(암시적/명시적), FUNCTION, PROCEDURE, PACKAGE, TRIGGER
    * FUNCTION - 연산
    * PROCEDURE, TRIGGER - 제어 후 쿼리수행
* **관계형 데이터베이스의 핵심은 테이블 (RDBMS)**

---

### 테이블 설계서(정의서)

* **RDBMS - Relational DBMS**
  * 테이블에 데이터를 저장, 제약사항으로 관계 설정
* **액셀을 사용, 테이블에 대한 문서를 작성**
  * 테이블명(Entity, Relation)
  * 컬럼명(Relation Schema, Attribute) - 영문, 한글
  * 크기
  * NULL 허용여부
  * 제약사항
  * 비고

* dept, emp 테이블 설계서 작성 예시
  * 부서정보
    * 부서번호, 부서명, 위치
  * 사원정보
    * 사원번호, 사원명, ..
  * 한 엑셀파일에 테이블당 워크시트를 추가
  * 영문 컬럼명 - 물리명
  * 한글 컬럼명 - 논리명
  * DATE 데이터형은 크기를 안주고 비워둠


![16-01](/md/legacy-assets/oracle/16-01.webp)


![16-02](/md/legacy-assets/oracle/16-02.webp)


![16-03](/md/legacy-assets/oracle/16-03.webp)


---

### ERD(Entity Relationship Diagram)

* **테이블간의 관계를 도식화하여 가독성과 직관성을 향상시킴**
* 테이블간 관계 : 식별 관계, 비식별 관계
  * **식별 관계**
    * **부모테이블의 PK를 자식테이블에서 PK로 참조하는 관계**
    * 실선
  * **비식별 관계**
    * **부모테이블의 PK를 자식테이블에서 일반컬럼으로 참조하는 관계**
    * 점선 
* **1:1 관계**
  * 부모의 값을 자식에서 무조건 하나만 사용하는 경우
* **1:N 관계**
  * 부모의 값이 자식에서 여러개 사용하는 경우
* **N:M 관계**
  * ERD로 표현이되나 실제 테이블에선 사용할 수 없고 테이블을 하나 더 추가하여 구현
  * 부모의 값 여러개를 자식에서 여러개로 사용하는 경우

![16-04](/md/legacy-assets/oracle/16-04.webp)

* **테이블 도형 (논리모델, 사람 기준)**

![16-05](/md/legacy-assets/oracle/16-05.webp)

* **테이블 도형 (물리모델, DBMS 기준)**

![16-06](/md/legacy-assets/oracle/16-06.webp)

* **비식별 1:N 관계**

![16-07](/md/legacy-assets/oracle/16-07.webp)

* **식별 1:1 관계**

![16-08](/md/legacy-assets/oracle/16-08.webp)

* **비식별 1:N 관계, 식별 1:N 관계**

![16-09](/md/legacy-assets/oracle/16-09.webp)


---

### eXERD

![16-10](/md/legacy-assets/oracle/16-10.webp)

* ERD 작성용 툴(개인사용은 무료지만 19년부턴 막히는듯..)
  * 논리모드, 물리모드 전환가능
  * **포워드 엔지니어링과 리버스 엔지니어링 지원**
    * 포워드 엔지니어링 - 만든 ERD를 DB로 변환하는 것
    * 리버스 엔지니어링 - 만들어진 DB를 ERD로 변환하는 것

---

### 정규화 (Normalization)

* 1970 **Edgar F. Codd**가 발견
  * BCNF까지 발견
* **이상현상을 줄이기 위한 방법 - 테이블을 나눠 이상현상을 없앤다.**
  * **삽입이상**
    * INSERT 시 필요없는 정보가 함께 추가되어야 하는 이상
  * **갱신이상**
    * UPDATE 시 일부만 변경되어 데이터가 맞지 않는(data inconsistency)문제가 발생하는 이상
  * **삭제이상**
    * 필요없는 값 하나 삭제하려면 행 자체를 삭제해 연쇄삭제가 되는 이상
* 비정규 테이블
  * 정규화가 되지 않은 테이블
* 역정규화
  * 진행된 정규화를 이전 상태로 되돌리는 것
* **1NF-2NF-3NF-BCNF-4NF-5NF**
  * **도부이결다조..(시나공)**
    * 1NF - 도메인의 원자성이 된 상태
      * **도메인의 원자성**
        * 컬럼의 값이 하나로 구성
        * NULL을 허용X(어려움)
        * 중복값을 최소화
    * 2NF - 부분 함수 종속 제거된 상태
    * 3NF - 이행적 함수 종속 제거된 상태
    * BCNF - 후보키가 아닌 결정자가 제거된 상태
    * 4NF - 다치 종속 제거
    * 5NF - 조인 종속 제거

* **결정자, 종속자**
  * 결정자는 키, 종속자는 키로 식별할 수 있는 값
  * 예로 emp테이블의 empno가 결정자
    * empno가 ename, sal, .. 컬럼들을 결정함(결정당하는 녀석들이 종속자)
  * 후보키
    * 일반컬럼이지만 사용하게되면 의미있는 값을 조회할 수 있는 컬럼
* **완전함수종속**
  * **결정자로만 의미있는 데이터를 검색할 수 있는 것**
	* 결정자(학번, 과목번호)가 성적을 결정(완전함수종속)
* **부분함수종속**
  * **결정자가 여러컬럼으로 구성될 때 그 중 하나의 컬럼으로만 컬럼을 사용하여 의미있는 레코드를 검색할 수 있는 것**
	* 결정자(학번,과목번호) 중 일부인 학번이 지도교수와 학과를 결정(부분함수종속)



![16-18](/md/legacy-assets/oracle/16-18.webp)








---


### 숙제풀이

* 아래 정보를 가지고 테이블설계서, ERD 작성 후 포워드 엔지니어링까지 생성해보기
  * 회원정보
    * 아이디(PK), 비밀번호(NN), 회원명(NN), 관심언어, 전화번호(UNIQUE), 주소(NN), 입력일(DEFAULT)
  * 게시판
    * 글번호(PK), 제목(NN), 내용(NN), 작성자id(FK), 작성일(DEFUALT), 조회수(DEFAULT 0)
  * 좌석
    * 좌석고유번호(PK), 좌석번호(NN), 커플석(CHECK N,Y 두개의 값만 입력가능, DEFAULT N)
  * 예매
    * 예매고유번호(PK), 예매번호, 좌석고유번호(FK), 회원아이디(FK), 예매일자(DEFAUvLT)
 * 테이블 설계서 user_info

![16-11](/md/legacy-assets/oracle/16-11.webp)

* 테이블 설계서 board

![16-12](/md/legacy-assets/oracle/16-12.webp)

* 테이블 설계서 seat

![16-13](/md/legacy-assets/oracle/16-13.webp)

* 테이블 설계서 reservation

![16-14](/md/legacy-assets/oracle/16-14.webp)

* ERD 논리모델

![16-15](/md/legacy-assets/oracle/16-15.webp)

* ERD 물리모델

![16-16](/md/legacy-assets/oracle/16-16.webp)

* [포워드 엔지니어링 후 insert로 제약사항 테스트](https://github.com/younggeun0/SSangYoung/blob/master/dev/query/date181112/hw_theater_queries.sql)
