← 목록으로
✏️ Study

데이터베이스 설계 | 12. 데이터베이스 설계

2024년 5월 31일

1. 데이터베이스 설계 정의

image.png

  • 사용자의 요구사항(Requirements)으로부터 현실 세계를 반영한 데이터베이스 구조를 도출해내는 과정
  • 어떠한 필드로 구성된 테이블을 어떠한 물리적 형태의 데이터베이스로 구성할 것인가를 결정

2. 데이터베이스설계단계

  • 데이터베이스 생명 주기
    • 요구사항 분석 : DB 사용 환경 분석 후 대상 및 제한 조건 도출
    • 개념적 설계 : 분석 결과를 추상화된 표현 방식으로 기술, DBMS에 독립적, 개념적 스키마 생성(ex. E-R 다이어그램)
    • 논리적 설계 : 목표 DBMS 구조에 맞는 스키마 생성, 논리적 스키마 생성(ex. Relation(Table))
    • 물리적 설계 : 목표 DBMS에 맞게 실제 컴퓨터에 저장되는 방식 설계, 물리적 스키마 생성
    • 구현 : 목표 DBMS의 SQL(DDL)로 데이터베이스 생성, 트랜잭션 작성
  • 데이터베이스 설계 시 고려사항
    • 충실성 : 필요로 하는 모든 데이터 표현
    • 단순성 : 단순하고 이해하기 쉬운 구조로 표현
    • 중복의 최소화 : 저장 공간의 효율적 사용, 데이터 일관성 유지
    • 제약조건의 표현 : 데이터가 갖추어야 할 조건을 표현

3. 개념적 설계

  • E-R Model : 개념 설계 단계에서 사용, 관계형 스키마로 매핑할 수 있다

4. 논리적 설계 : E-R to Relational

  • Relationship sets to Relations
    • 관계 집합을 관계로 변환할 때 관계의 속성은 반드시 포함되어야 한다
    • 각 참여 엔터티 집합에 대한 키(외래 키)
    • 각각의 기본키를 가져오고 자기 속성을 가져오는 것이 보편적 방법
    • 카디날리티 비율은 두 개의 엔티티 타입 간 관계에서 참여자의 수를 의미
    • 1 : 1
      • 방법 1 : E1의 기본 키를 E2의 외래 키로 추가(효율적)
      • 방법 2 : E2의 기본 키를 E1의 외래 키로 추가
      • 방법 3 : 관계를 별도의 릴레이션으로 만드는 것 ⇒ 필요 이상으로 릴레이션 수를 늘려서 조인으로 인한 연산의 양이 많아져서 비효율적
      • 방법 4 : 하나의 릴레이션으로 만드는 것 ⇒ E1과 E2 모두 전체 참여일 때 가장 효율적(후보 키 : PK1, PK2/기본 키 : PK1)
      • 한 쪽은 전체 참여, 다른 쪽은 부분 참여할 경 우⇒ 전체 참여하는 릴레이션에 다른 릴레이션의 기본 키를 외래 키로 포함하는 것이 효율적(방법 1)
    • 1 : M
      • 방법 1 : 관계가 M인 방향의 릴레이션에 관계가 1인 방향 릴레이션의 기본 키를 외래 키로 추가(효율적)
      • 방법 2 : 관계가 1인 방향의 릴레이션에 관계가 M인 방향 릴레이션의 기본 키를 외래 키로 추가 ⇒ M만큼 정보 중복
      • 방법 3 : 별도의 릴레이션을 만드는 것 ⇒ 릴레이션 수를 늘려서 조인이 많아져 비효율적
    • N : M
      • 1 : M에서 관계가 1쪽인 릴레이션에 관계가 M쪽인 릴레이션의 기본 키를 외래 키로 두면 많은 중복 발생 ⇒ N : M인 경우 양방향으로 1 : M이므로 관계를 별도의 릴레이션으로 설계하는 것이 가장 효율적

5. 논리적 설계 : 제약 조건

  • 전체 참여 제약 조건(굵은 선) ⇒ SQL에서 NOT NULL로 표현
  • Weak Entity Sets in SQL : 오너 개체의 기본 키와 약한 개체의 부분 키가 기본 키
    • 오너 개체가 삭제될 때 약한 개체도 삭제되게 하려면 : ON DELETE CASCADE\
  • IS-A Hierarchies to Relations
    • 방법 1 : 상위 클래스의 기본 키를 외래 키가 아닌 기본 키로 추가(유일하게 구별하는 속성이기 때문) : IS-A Hierarchies를 3개의 릴레이션으로 설계할 때 서브 클래스에 반드시 상위 클래스의 기본 키 추가
    • 릴레이션이 참조하는 것이 삭제되면 ⇒ 연쇄 삭제(CASCADE)
    • 장점 : 최소화된 중복성
    • 단점 : 릴레이션과 조인 필요
  • 방법 2 : 속성을 두 릴레이션에 중복해서 포함, 두 개의 서브 클래스 중 하나에 속해야 함
    • 장점 : 조인 불필요
    • 단점 : 속성이 중복됨