본문 바로가기

데이터베이스(DB)/Oracle
[Oracle] 데이터베이스 설계

// 데이터베이스 설계
1. 요구사항 수집 및 분석
2. 개념 데이터 모델링
3. 논리 데이터 모델링
4. 물리 데이터 모델링
5. 데이터베이스 구축


// 데이터 모델링
- 요구 분석을 기반으로 수집한 데이터를 분석하고 저장 구조를 생성한 후 도식화 하여 산출물(ERD)을 도출하는 것
- 데이터 저장을 위한 데이터 구조를 설계하는 작업
- DBMS 종류를 결정하지 않는다.

a. 개념 데이터 모델링 : 간단하게 표현한 설계도 > 테이블 + 컬럼 + 관계
b. 논리 데이터 모델링 : 제대로 된 설계도 > 관계형 데이터베이스 성질 반영 > 속성 + 도메인 + 키
c. 물리 데이터 모델링 : 특정 DBMS 결정 > 오라클 선정 + 반영 > 물리적 설정


1. Entity, 엔티티
    - 다른 엔티티와 분류될 수 있고, 다른 엔티티에 대해 정해진 관계를 맺을 수 있는 데이터 단위
    - 릴레이션 = 객체 = 레코드 = 엔티티 = 테이블(행)

    a. 학생 정보 관리
       - 정보 수집: 아이디, 학생명, 나이, 주소, 연락처..
        - 학생(아이디, 학생명, 나이, 주소, 연락처)  > 학생 : 엔티티
    b. 강의실 정보 관리
        - 정보 수집: 강의실 호수, 크기, 인원수, 용도, 면적..
        - 강의실(강의실 호수, 크기, 인원수) > 강의실 : 엔티티

2.  Attribute, 속성
    - 엔티티를 구성하는 정보
    - 컬럼

3. Entity Relationship, 엔티티 관계
    - 엔티티: 학생(이름, 나이, 반..), 교사(이름, 담당과목, 반..), 학급(학년, 반..)
    - 학생 <-> 학급 <-> 교사  : 관계


// ERD, Entity Relationship Diagram

- 엔티티 간의 관계를 표현한 그림

- 관계형 데이터베이스 모델링 기법 중 하나
- 손, 오피스, 전문틀(exERD, AQUERYTOOL, ER-win...)


// 개념적 모델링

- 그리는 방법 : Entity, Attribute, Relationship 등을 표현하는 방법

    1. Entity
        - 사각형
       - 이름을 작성
       - ERD 내에 동일한 엔티티명 사용 금지

    2. Attribute
       - 원
       - 엔티티에 연결 
       - 추가 표기사항(속성에 대한 성질 기술)
    
        a. NN, Not Null
            - 해당 속성은 반드시 작성해야 한다.
            - 필수값
        b. ND, Not Duplicate
            - 해당 속성은 중복될 수 없다.
            - 유일값(Unique)

       1. 중복되면 안 되고, 생략되면 안 된다. (NN & ND)
           - #*속성명
        2. 생략되면 안 된다.(NN)
            - *속성명
       3. 중복되면 안 된다.(ND)
           - #속성명
       4. 중복되도 되고, 생략되도 된다.
           - 속성명
            - o속성명 (optional)

    3. Relationship
        - 마름모
        - 엔티티와 엔티티의 관계
        - 가장 중요한 표현★★★

        - 관계의 패턴
        ~ 여자 - 연인관계 - 친구
            a. 1:1 
               - 일대일
               ~ 모든 여자와 남자가 서로만 만남
            b. 1:N
               - 일대다
               ~ 남자친구가 여러 명인 여자가 있음
            c. N:M
               - 다대다
                ~ 여자고 남자고 바람피는 사람이 많음 > 폴리 아모리..?

- 그리는 순서
    1. 엔티티 정의
    2. 속성 정의
    3. 식별자 선언
          - 기본키


 


- 복합값, 다중값


// 논리적 모델링

- 개념적 모델링에서 속성이 다중값 또는 복합값인 경우, 논리적 모델링에서는 별도의 테이블로 분리되어 관계를 형성해야 한다.★

- 그리는 방법

    1. Entity
        - 사각형

    2. Attribute
        - 엔티티 사각형 안에 표기

    3. Relationship
        - 선으로만 연결
        - 관계차수 多
         

- 그리는 순서 : 1~3 반복 > 전문적으로 그리기
    1. 엔티티 정의
    2. 속성 정의
    3. 식별자 선언
          - 기본키



- 복합값, 다중값


// 물리적 모델링

- 오라클에 맞게 구체적으로

- 물리명(식별자) 생성 ~ name

- 자료형 ~ varchar

- 길이  ~ 30

- 도메인 ~ 2자~5자 이내의 한글

- 제약사항 생성



// 모델링 작업 > ERD(논리,물리) > [정규화] > 안정성 높고, 효율적 구조로 변경 > ERD


// 관계형 데이터베이스 시스템이 지향하는 데이터베이스 상태
    1. 원자값을 가진다.
    2. 최대한 null을 가지지 않는다.
    3. 중복값을 가지지 않는다.


// 이상 현상
    1. 삽입 이상, Insertion Anomaly
        - 테이블에 데이터를 삽입할 때, 원하지 않는 데이터까지 같이 넣어야 하는 상황
    2. 갱신 이상, pdate Anomaly
        - 동일한 데이터가 2개 이상의 테이블에 동시에 존재할 때 원하지 않는 데이터까지 함께 수정해야 하는 상황
    3. 삭제 이상, Deletion Anomaly
        - 테이블의 데이터를 삭제할 때, 원하지 않는 데이터까지 같이 지워야 하는 상황


// 함수 종속, Functional Dependency
    - 1개의 테이블 내 컬럼끼리의 관계 표현

    1. 완전 함수 종속, Full Functional Dependency
    2. 부분 함수 종속, Partial Functional Dependency
        - 일부 컬럼이 복합키 일부에만 종속되는 현상
    3. 이행 함수 종속, Transitive Functional Dependncy
        - 컬럼이 기본키가 아닌 다른 키에 종속되는 현상


// 정규화
    - 이상현상을 없애고, 관계형 데이터베이스 시스템이 지향하는 데이터베이스 상태로 만드는 작업
    - 부분 함수 종속이나 이행 함수 종속을 모두 없애고, 모든 컬럼 관계를 완전 함수 종속으로 만드는 작업★★★★
    - 비정규화 > 정규화
    - 1NF, 2NF ... (Normal Form)

    1. 제 1 정규화, 1NF
        - 모든 컬럼(속성)은 원자값을 가진다.
        - 다중값(여러 개로 분리 가능한 값)을 1개의 컬럼 안에 넣지 않는다.
        - 다중값을 가지는 컬럼을 찾아 없애는 작업

    2. 제 2 정규화, 2NF
        - 기본키(PK)가 아닌 모든 나머지 컬럼은 기본키에 완전 함수 종속이어야 한다.
        - 부분 함수 종속 제거
        - 주로 복합키를 가지는 테이블에서 발견된다.
        - 일부 컬럼이 복합키 일부에만 종속되는 현상을 제거하는 정규화

    3. 제 3 정규화, 3NF
        - 기본키(PK)가 아닌 모든 나머지 컬럼은 기본키에 완전 함수 종속이어야 한다.
        - 이행 함수 종속 제거
        - 컬럼이 기본키가 아닌 다른 키에 종속되는 현상을 제거하는 정규화
        - PK는 수정될 가능성이 있는 도메인을 사용하면 안 된다.★★★★


// 역정규화
    - 정규화된 결과를 다시 원래대로 되돌리는 작업
    - 보통 2개 이상의 테이블을 1개의 테이블로 합치는 작업
    - 수업중 사용 금지!
    

'데이터베이스(DB) > Oracle' 카테고리의 다른 글

[Oracle] PL/SQL  (1) 2023.03.27
[Oracle] 복합키  (0) 2023.03.24
[Oracle] 계층형 쿼리  (0) 2023.03.23
[Oracle] Pseudo  (0) 2023.03.22
[Oracle]식별자  (0) 2023.03.20