[DB] 논리적 데이터 모델링

김나영·2023년 3월 29일
0

DATABASE

목록 보기
7/9
post-thumbnail

논리적 데이터베이스 모델링

실제 DBMS를 고려하지 않은 상태로 데이터베이스 내의 스키마를 정의하는 단계

Mapping Rule

개념적 데이터 모델링 단계에서 정의된 ER Diagram을 관계형 데이터베이스 이론에 맞게 변환시키는 작업

정규화

실세계에서 발생하는 데이터를 수학적인 방법에 의해 구조화시켜 체계적으로 관리할 수 있도록 한 이론
보다 효율적으로 데이터가 저장될 수 있는 구조를 만들기 위해 정규화 실행
중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있음

불필요한 데이터를 제거한다
데이터 저장을 "논리적으로" 한다

  • 목적
    • 정보의 중복을 최소화
    • 정보모형의 단순화
    • 정보 공유도 증대
    • 정보의 일관성 확보
    • 정보 품질 증대
  • 정규화 필요성
    • 엔티티를 구성하는 속성간의 중복을 제거하여 데이터베이스를 최적화
    • 속성간 함수속서엥 의해 발생하는 이상현상을 제거
    • 정규화를 통해 Data 감소 및 중복된 Data 제거는 가능하지만 조인의 증가로 성능 저하 발생
이상현상내용
입력이상데이터 입력 시 필요 없는 속성까지 입력해야 하는 현상
수정이상데이터 수정 시 원하지 않는 데이터까지 수정되는 현상
삭제이상데이터 삭제 시 필요한 데이터까지 삭제되는 현상

정규형

정규형에 맞게 정규화를 함
정규화를 수행하는데 있어서의 규칙

  • 정규형의 유형
    • 제 1 정규형
      반복되는 속성이나 그룹의 속성을 제거하고, 새로운 실체를 추가한 후에 기존의 실체와 일대다의 관계를 형성한다
    • 제 2 정규형
      복합키로 구성된 경우 해당 테이블 안의 칼럼들은 복합키 전체에 의존적이어야 한다.
    • 제 3 정규형
      한 테이블 안의 모든 키가 아닌 칼럼들은 기본키에 의존해야 한다. 만일 키가 아닌 칼럼에 종속되는 속성이 존재한다면 이를 제거해야 한다.
    • B-Code 정규형
    • 제 4 정규형
    • 제 5 정규형

1차 정규화

반복되는 속성이나 그룹의 속성을 제거하고, 새로운 엔티티를 추가한 후에 기존의 엔티티와 일대다의 관계를 형성
테이블의 칼럼이 하나의 값을 갖도록 테이블을 분해

2차 정규화

복합식별자 일부에 의존적인 속성이 존재한다면 이를 제거 (부분종속속성 제거)
제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해
완전 함수 종속 -> 기본키의 부분집합이 결정자가 되어선 안된다

3차 정규화

한 엔티티 안의 모든 주식별자가 아닌 속성들은 주식별자에 의존해야 한다
제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해

슈퍼타입과 서브타입

Extended ER 모델
하나의 실체는 두개 이상의 실체로 분할될 수 있으며, 이들의 공통 분모를 모아서 슈퍼타입으로 정의하고 나머지 배타적인 속성들을 모아서 서브타입으로 정의한다.
슈퍼타입에 정의된 공통 속성과 각 서브타입의 속성을 더하여 각각의 서브타입별로 테이블을 설계하는 방법 => 서브타입 단위의 모델링

  • 슈퍼타입 모델링
    • 전체 데이터 검색이 쉬움, 무결성에 유리
    • 서브타입별 속성이 많다면 지나치게 NULL이 많이 발생 ( 데이터 공간의 낭비)
  • 서브타입 모델링
    • NULL이 없거나 줄어듦 (데이터 공간의 낭비가 적음), 테이블에 따라 별개로 처리할 떄 효율 상승
    • UNION 함수 사용시 중복제거가 가능하기 때문에 unique의 관리가 중요. intersect 연산 사용시 양쪽 테이블에 중복 값이 안나오도록 무결성 유지가 중요. 비효율적 조인, 합집합, 교집합 발생 확률 증가 => 속도저하

재귀적 관계

자기 자신과 관계를 맺음으로 해서 자기 자신의 기본키가 자기 자신에게 외래키로 전이되는 관계
한 개체집합이 자기자신과 관계집합을 형성

  • 계층적인 구조를 정의할 때 재귀적 관계를 사용한다

계층구조를 정의할 수 있는 데이터 형식 : Hierarchyid

다대다(M:N) 관계

한 테이블에 있는 여러 레코드가 다른 테이블에 있는 여러 레코드와 연관되어 있는 경우 발생

해당 문제를 해소하기 위해서 연결테이블 이라는 세번째 테이블을 사용하여 다대다 관계를 두개의 일대다 관계로 분리해야함

코드 테이블 작성

공통코드 테이블 -> 코드와 코드값으로 구성된 다양한 코드들을 모아서 하나의 테이블에서 관리
공통코드는 코드의 이름이 달라야 등록할수 있게 설계 해야함
코드명만을 키로 가지는 테이블을 설계 후 코드명을 기반으로 위에서 정의한 코드별로 그에 따른 값을 저장해야함

공통 코드 테이블의 관게를 표현하지 않는 것은 관계가 많아서 이기도 하지만 코드 칼럼만 상속받을 수 없도록 되어있는 모델 구조의 특징

일반화 Generalization

여러 실체유형 간의 공통적인 특성을 파악하는 과정

둘 또는 그 이상의 실체유형 요소간에 서브세트(부분집합)를 정의하는 개념

데이터 모델링 언어는 일반화에 의하여 실체유형을 슈퍼/서브타입으로 구분하는 특징이 있다!

공통 속성을 가지는 슈퍼타입과 공통부분을 제외하고 두개 이상의 엔티티간의 속성에 차이가 있을 때 별도의 서브타입으로 존재

  • Exclusive : 슈퍼타입의 엔티티가 반드시 하나의 서브타입에는 속하는 관계
  • Inclusive : 슈퍼타입의 엔티티가 두개 이상의 서브타입에 포함될 수 있는 관계
  • 병렬 관계 : 엔티티와 엔티티가 독립적으로 분리되어 있으면서 두개 이상의 관계가 상호간에 존재하는 형태
  • 재귀적 관계 : 하나의 엔티티 내에서 엔티티와 엔티티가 관계를 맺고 있는 형태 / 부서, 부품, 메뉴 등과 같이 계층 구조 형태를 표현할 때 유용
  • RoleName : FK attribute의 역할 이름 (별칭) / 원치 않는 Unification 현상 해결
profile
응애 나 애기 개발자

0개의 댓글