[MySQL] 데이터베이스 설계(개념적 설계, 논리적 설계)

2025. 12. 26. 21:29·Programming/SQL(DB)
728x90

데이터베이스 설계

데이터베이스 설계의 과정

 

1단계: 요구 사항 분석

2단계: 개념적 설계

3단계: 논리적 설계

4단계: 물리적 설계

5단계: 구현

요구사항 분석

  • 목적
    • 사용자의 요구사항을 수집하고 분석하여 개발할 DB의 용도 파악
  • 결과물
    • 요구사항 명세서
  • 주요 작업
    • DB를 실제 사용할 주요 사용자의 범위 결정
    • 요구사항 분석 결과를 요구사항 명세서로 작성한다.

 

개념적 설계

  • 요구사항 명세로부터 개념적 스키마를 만들어 냄( 개념적 모델링 )
  • 요구사항 분석 결과를 바탕을 DB에 저장해둘 필요가 있다고 판단되는 데이터 요소를 추출하고 그들 간의 관계를 파악하여 표현함
    • 개체 타입, 속성, 관계 타입 식별
    • 속성의 도메인 결정
    • 키 속성 결정
  • 완성된 개념적 스키마는 E-R 다이어그램으로 표현한다.

 

개체 도출

  • 각 명사에 대해 속성인지 개체인지 분류
  • 중복 명사, 유사한 의미의 명사는 하나로 통합
  • 개체 후보 풀에 있는 명사 재검토
    • 검토하여 개체 리스트에 기록
    • 여전히 불분명하다면 풀에서 제외한다.
  • 도출된 개체에 대해 구축될 시스템에서 데이터를 관리할 필요가 있는지 재검토
  • 개체 명명(naming) 규칙
    • 다른 이름과 중복되지 않게
    • 지나치게 길지 않게
    • 의미 없는 수사는 붙이지 않는다.
    • 단수명사 사용

 

속성 설정

  • 키 속성 선정
    • 개체에 소속된 인스턴스들을 유일하게 식별할 수 있는 속성
    • 현재 시점 뿐만 아니라 미래 어떤 시점에서도 중복이 있어서는 안됨
  • 선정 기준
    • 속성 값이 변하지 않아야 함
    • 반드시 값이 있어야 함. Null이면 안됨
    • 키 속성이 여러 개일 수 있으나 너무 많은 것은 좋지 않음

 

관계 설정

  • 관계는 개체 간의 의미 있는 연관성으로 요구사항 문장에서 동사로 표현된다.
  • 추출한 관계에 대한 매핑 카디널리티와 참여 특성을 결정한다.
    • 매핑 카디널리티: 관계를 맺고 있는 두 개체에서, 각 개체 인스턴스가 관계를 맺고 있는 상대 개체의 개체 인스턴스 개수를 의미
  • 일대일(1:1), 일대다(1:N), 다대다(N:M) 중 하나로 분류
  • 개체가 관계에 필수적으로 참여하는지 선택적으로 참여하는지 참여 특성을 결정한다.

 

논리적 설계

  • 개념적 스키마를 기반으로 논리적 스키마를 설계
  • 개발에 사용할 DBMS에 적합한 논리적 스키마 설계
  • 개념적 스키마를 관계 데이터 모델의 릴레이션으로 매핑
    • 개념적 스키마 → 논리적 스키마; 논리적 모델링(데이터 모델링)
    • E-R 다이어그램 → 릴레이션 스키마
    • 개체 타입과 관계 타입을 모두 릴레이션으로 매핑

1단계: 강한 개체 타입 변환

  • 각 강한 개체 타입 E에 대해 하나의 릴레이션 R을 생성한다.
  • 단순 속성: R에 모두 포함한다.
  • 복합 속성: 복합 속성을 구성하는 단순 속성들만 R에 포함한다.
  • E의 키 속성이 릴레이션 R의 기본키가 된다.

 

2단계: 약한 개체 타입 변환

  • ER 스키마에서 주 개체 타입 E를 갖는 각 약한 개체 타입 W에 대해 릴레이션 R을 생성
  • W에 있던 모든 단순 속성: R에 포함된다.
  • 주 개체 타입에 해당하는 릴레이션의 기본키: 약한 개체 타입에 해당하는 릴레이션에 외래 키로 포함된다.
    • 약한 개체는 강한 개체에 따라 존재 여부가 결정되는 만큼 강한 개체의 기본키를 이용해 식별하는 것이기 떄문
  • 약한 개체 타입에 해당하는 릴레이션 R의 기본 키: 주 개체 타입에 해당하는 릴레이션을 참조하는 외래 키의 조합으로 이루어진다.

 

3단계: 1:1 관계 타입 변환

  • 일반적인 일대일 관계에서는 서로의 기본키를 주고 받아 이를 외래키로 지정한다.
  • 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받는다(생성한다)
  • 모든 개체가 일대일 관계에 필수적으로 참여하면 릴레이션 하나로 합친다.

 

4단계: 1:n 관계 타입 변환

  • 일반적인 일대다(1:n) 관계는 외래키로 표현한다.
    • 1측 개체 릴레이션의 기본키를 가져와 n측 개체 릴레이션에 포함시키고 외래키로 지정한다.
    • n측 개체 릴레이션의 기본키를 가져와 1측 개체 릴레이션에 포함시키면 외래키가 다중 값을 가지므로 릴레이션의 특성을 위반한다.
  • 약한 개체가 참여하는 일대다 관계는 외래키를 포함해서 기본키로 지정한다.
    • 1측 개체 릴레이션의 기본키를 가져와 n측 개체 릴레이션에 포함시키고 외래키로 지정한다
    • 위의 관계와 다른 점은 외래키를 포함하여 기본키를 지정해야 한다.

 

5단계: m:n 관계 타입 변환

  • M:N 관계 타입 R에 대해서는 하나의 릴레이션으로 변환한다.
  • 참여 개체 타입에 해당하는 릴레이션들의 기본 키를 릴레이션 R에 외래 키로 포함시키고, 이들의 조합이 릴레이션 R의 기본 키가 된다.

6단계: 3진 이상의 관계 타입 변환

  • 3진 이상의 각 관계 타입 R에 대하여 릴레이션 R을 생성한다.
  • 관계 타입 R에 참여하는 모든 개체 타입에 대응되는 릴레이션들의 기본 키를 릴레이션 R에 외래 키로 포함시킨다.

7단계: 다중 값 속성 변환

  • 다중 값 속성은 릴레이션으로 변환한다.
    • 관계 데이터 모델의 릴레이션에서는 다중 값을 가지는 속성을 허용하지 않으므로 별도의 릴레이션을 만들어 포함시킨다.
    • 다중 값 속성을 가지고 있는 개체에 해당하는 릴레이션의 기본키를 가져와 포함시키고 이를 외래키로 지정한다.
    • 기본키는 다중 값 속성과 외래키를 조합하여 지정한다.
    • 중복되는 값들이 존재할 수 있다.



728x90
저작자표시 (새창열림)

'Programming > SQL(DB)' 카테고리의 다른 글

[MySQL] 데이터베이스 물리적 설계  (0) 2025.12.27
[MySQL] 데이터베이스 정규화  (0) 2025.12.27
[MySQL] 데이터 모델링  (1) 2025.12.26
[MySQL] 프로그래머스 서울에 위치한 식당 목록 출력하기  (0) 2025.02.13
[MySQL] 프로그래머스 평균 일일 대여 요금 구하기  (0) 2025.02.11
'Programming/SQL(DB)' 카테고리의 다른 글
  • [MySQL] 데이터베이스 물리적 설계
  • [MySQL] 데이터베이스 정규화
  • [MySQL] 데이터 모델링
  • [MySQL] 프로그래머스 서울에 위치한 식당 목록 출력하기
쿨쿨.
쿨쿨.
  • 쿨쿨.
    All of the life
    쿨쿨.
  • 전체
    오늘
    어제
    • 분류 전체보기 (279) N
      • Programming (47)
        • C, C++ (18)
        • Python (6)
        • Java (1)
        • HTML,CSS,JS (3)
        • SQL(DB) (13)
        • SpringBoot (3)
        • Android (2)
        • CI,CD (1)
      • Algorithm (173)
        • Review (4)
      • Security (14)
        • WebHacking (3)
        • Websecurity (11)
      • OS (19)
        • Linux (12)
        • Mac os (2)
      • 머신러닝 (1)
      • CS(Computer Science) (12)
        • 컴퓨터 네트워크 (3)
        • 컴퓨터 구조 (1)
        • 인공지능 (8)
      • Docker (1)
      • Dev Book Review (3)
        • Clean Code (1)
        • Effective Java (0)
        • Real MySQL (2)
      • SWM (1)
      • Review (6) N
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    브루트포스
    재귀
    Bandit
    트리
    BFS
    linux
    누적합
    백트래킹
    그리디
    정렬
    깊이우선탐색
    비트마스킹
    우선순위 큐
    투포인터
    c언어
    시뮬레이션
    백준
    그래프 이론
    wargame
    다익스트라
    DFS
    우선순위큐
    DP
    코딩
    구현
    다이나믹 프로그래밍
    WebSecurity
    이분탐색
    Leviathan
    에라토스테네스의 체
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.6
쿨쿨.
[MySQL] 데이터베이스 설계(개념적 설계, 논리적 설계)
상단으로

티스토리툴바