오라클 DBMS 정리 16
12 Nov 2018
Reading time ~2 minutes
오라클 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 데이터형은 크기를 안주고 비워둠
- 부서정보
ERD(Entity Relationship Diagram)
- 테이블간의 관계를 도식화하여 가독성과 직관성을 향상시킴
- 테이블간 관계 : 식별 관계, 비식별 관계
- 식별 관계
- 부모테이블의 PK를 자식테이블에서 PK로 참조하는 관계
- 실선
- 비식별 관계
- 부모테이블의 PK를 자식테이블에서 일반컬럼으로 참조하는 관계
- 점선
- 식별 관계
- 1:1 관계
- 부모의 값을 자식에서 무조건 하나만 사용하는 경우
- 1:N 관계
- 부모의 값이 자식에서 여러개 사용하는 경우
- N:M 관계
- ERD로 표현이되나 실제 테이블에선 사용할 수 없고 테이블을 하나 더 추가하여 구현
- 부모의 값 여러개를 자식에서 여러개로 사용하는 경우
- 테이블 도형 (논리모델, 사람 기준)
- 테이블 도형 (물리모델, DBMS 기준)
- 비식별 1:N 관계
- 식별 1:1 관계
- 비식별 1:N 관계, 식별 1:N 관계
eXERD
- 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 - 조인 종속 제거
- 1NF - 도메인의 원자성이 된 상태
- 도부이결다조..(시나공)
- 결정자, 종속자
- 결정자는 키, 종속자는 키로 식별할 수 있는 값
- 예로 emp테이블의 empno가 결정자
- empno가 ename, sal, .. 컬럼들을 결정함(결정당하는 녀석들이 종속자)
- 후보키
- 일반컬럼이지만 사용하게되면 의미있는 값을 조회할 수 있는 컬럼
- 완전함수종속
- 결정자로만 의미있는 데이터를 검색할 수 있는 것
- 결정자(학번, 과목번호)가 성적을 결정(완전함수종속)
- 결정자로만 의미있는 데이터를 검색할 수 있는 것
- 부분함수종속
- 결정자가 여러컬럼으로 구성될 때 그 중 하나의 컬럼으로만 컬럼을 사용하여 의미있는 레코드를 검색할 수 있는 것
- 결정자(학번,과목번호) 중 일부인 학번이 지도교수와 학과를 결정(부분함수종속)
- 결정자가 여러컬럼으로 구성될 때 그 중 하나의 컬럼으로만 컬럼을 사용하여 의미있는 레코드를 검색할 수 있는 것
숙제풀이
- 아래 정보를 가지고 테이블설계서, 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
- 테이블 설계서 board
- 테이블 설계서 seat
- 테이블 설계서 reservation
- ERD 논리모델
- ERD 물리모델