본문 바로가기
Database

데이터 모델링 - 1. 이론

by Ellery 2022. 8. 2.
  • 데이터 모델, 데이터 모델링
    • 데이터 모델: 현실의 정보나 데이터를 추상화해서 체계적으로 표현한 모형
    • 데이터 모델링: 영속성을 갖는 데이터에 대한 시스템 구조를 형상화하는 과정
  • 데이터 모델링의 순서
    • 개념 파악(업무 파악) → 개념 모델링 → 논리 모델링 → 물리 모델링
    • 대상을 인지하고 식별한다 → 식별한 개념을 추상화해서 표현 → DB로 구축하기 위해 구체화
    • 논리 모델링 시에는 현실에 맞게, 고객들이 사용하기 쉽도록 작성
    • 물리 모델링 시에는 성능에 신경을 써야하기 때문에 중복 허용을 하거나, 추가 칼럼을 넣는던가 할 수 있다.
  • ER 모델
    • 좋은 ER모델이 만족하는 특성 2가지 - 최소성(중복제거), 확장성(추상적으로 작성, 너무 구체적이면 확장성이 떨어짐)
    • 구성요소 - 엔티티, 관계, 속성, 식별자(속성, 관계 중 1개 이상의 조합)
      1. 엔티티 - 실제 세계에서 유일한 객체. 업무 구현에 필요한 주체, 대상, 행위 등 모든 것
        • 엔티티 추출할 때는 어떤 속성을 가지고 있는지는 신경쓰지말고 모두 적어 내려 가고 나중에 정리한다.
        • 슈퍼 - 서브 타입 엔티티 구조는 일반화/특수화를 통해 도출할 수 있다 ex) <고객>-<개인고객, 법인고객>
          • 엔티티의 일반화: 여러 개의 엔티티를 하나의 공통된 엔티티로 만드는 방식. 엔티티 간의 배타관계를 해소해야 할 때 엔티티를 일반화하여 관계를 단순하게 정의할 수 있고, 엔티티 유형이 늘어난다던가 하는 상황에 유연하게 대처할 수 있다.
            • 하위 수준의 엔티티 일반화 ex) 개인고객, 법인고객을 고객의 하위 엔티티로 일반화
            • 상위 수준, 하위 수준 엔티티의 일반화 ex) 부서 간의 구조 표현 시 <본부>-<하위 팀> 구조에서 <부서>-<(다른) 부서> 엔티티로 표현
            • 일반화를 해서 집합간의 배타 관계를 해소하고 두 집합을 통합 테이블 형태로 설계하였을 때의 장단점→ 속성이 같은 테이블에 혼합되서 속성의 의미가 불분명해지고, FK, NOT NULL constraint를 반영할 수 없어 데이터 무결성 문제가 발생함
            • → UNION, OUTER JOIN할 필요가 없어서 개발 생산성, 성능 증대(중복이 존재할 수 없음)
          • 엔티티의 특수화: 하나의 상위 수준 엔티티를 여러 개의 하위 수준 엔티티로 쪼개는 방식. 각각 다른 속성을 식별하여 다른 규칙을 적용할 수 있다 ex) 고객의 하위 엔티티로 개인고객, 법인고객을 만든다
          • 집단화: 두 엔티티와 관계를 묶어서 새로운 상위 수준 엔티티로 정의하는 것
      2. 관계 - 엔티티 간의 업무 규칙 정의 혹은 어떤 관계가 이루어질 수 있는지 표현함
        • 관계의 구성요소
          • 관계수cardinality - 해당 엔티티의 인스턴스가 다른 엔티티의 인스턴스 몇 개와 대응되는지 표현. 1:1, 1:M, N:M 관계
            • 직원은 인턴과정을 이수한다. 인턴과정에 직원이 채용된다. 직원 - 인턴과정은 1대1관계이다
            • 부서는 직원으로 구성된다. 직원은 부서에 소속된다. 부서 - 직원은 1대다 관계이다.
            • 학생은 수강과목을 수강한다. 수강과목이 학생에게 선택된다. 학생 - 수강과목은 다대다 관계이다.
          • 선택성 optionality - 관계 양 쪽의 엔티티가 서로 필수적인 관계인지, 선택적인 관계인지 표현. Mandatory / Optional
            • 양쪽이 필수인지, 한쪽만 필수인지, 양쪽 다 선택적인지
            • 주문 - 주문 상품의 <주문> 관계에서 서로의 엔티티 인스턴스가 필요하므로 필수 - 필수 관계이다
            • 고객 - 주문의 <주문고객> 관계에서 주문 엔티티 인스턴스는 고객 엔티티 인스턴스가 반드시 필요하지만 고객은 아니므로 필수 - 선택 관계이다
            • 사원 - 계좌의 <소개직원> 관계에서 사원은 계좌가 없을 수도 있고, 계좌도 소개직원을 지정하지 않아도 되므로 선택 - 선택 관계이다
          • 식별자 상속 - 참조되는 상위 엔티티 식별자 → 참조하는 하위 엔티티 식별자로 상속되는 관계 / 식별자가 아닌 일반 속성으로 상속되는 관계를 표현
            • 식별 관계, 비식별관계
          • 관계 유형 - 기본 관계, 재귀적 관계, 병렬적 관계, 슈퍼/서브타입 관계 등…
      3. 속성
      4. 식별자
  • 관계형 데이터 관련 용어 정리
    • 스키마 - 릴레이션의 구조
    • 인스턴스 - 릴레이션에서의 튜플
    • 키 - 슈퍼키, 후보키, 기본키, 대체키, 외래키
    • 제약조건 - DB의 무결성을 지키기 위해 사용(PK, not null, FK…)
      • 키 제약조건 - 튜플을 유일하게 식별할 수 있는 속성을 키로 구성한다.
      • 무결성 제약 조건 - 실체 무결성(not null), 영역 무결성(도메인), 참조 무결성(fk)
    • 함수종속
    • 정규화 - 속성을 나눠서 릴레이션을 쪼갠다. (중복이 제거된다)
      • 정규화를 너무 심하게 하면 join 때문에 성능이 저하된다. → 반정규화로 데이터중복을 허용해야한다. 이상현상을 주의해야한다.
      • 제1정규형 1NF -중복되는 행이 없고, 모든 열의 값은 원자값을 가져야 한다.
      • 제2정규형 2NF - 키가 아닌 속성(후보키가 아닌 속성)은 후보키 전체에 종속되어야 한다. 그렇지 않거나, 다른 후보키에 종속적인 속성은 별도의 릴레이션으로 분리해야한다.
      • 제3정규형 3NF - 키가 아닌 속성(후보키가 아닌 속성) 간에는 서로 종속적인 관계가 없어야한다.
    • 연결함정 - 정규화 과정에서 엔티티 간의 관계가 불분명해지거나 연관성이 모호해지는 상황
      • 부채꼴 함정 - M:N 관계를 해결하기 위해 교차 엔티티로 1:M 관계를 만들 때 나타날 수 있음. 관계를 잘못 설계해서 연계된 정보를 추적하지 못하게 될 때 발생. 관계를 명확하게 해서 해결해야한다.
        • ex) [공급사] - [회사] - [물품] 관계. 회사에서 물품을 공급하는 공급사를 관리하고, 여러 상품을 구매한다. 해당 물품이 어느 공급사에서 구매한 것인지 알 수 없다.
        • → [회사] - [공급사] - [물품] 회사와 공급사 간의 관계, 공급사와 물품 간의 관계로 변환해서 명확하게 표현한다

 

참고서적: 핵심 데이터 모델링 - 유동오 저, 디비안(DBian)