데이터베이스 설계는 단순히 테이블을 만드는 작업이 아니라, 사용자의 요구를 분석하고, 데이터 구조를 체계화하며, 성능까지 고려하는 과정이다.
이 설계는 세 가지 단계로 나누어 진행된다:
- 개념적 설계
- 논리적 설계
- 물리적 설계
1. 개념적 설계 (Conceptual Design)
개념적 설계는 사용자 요구사항을 기반으로, 어떤 데이터를 관리할지 추상적으로 모델링하는 단계이다.
즉, 현실 세계의 개체(Entity)와 관계(Relationship)를 식별하여 ER 다이어그램 형태로 표현한다.
목표
- 주요 개체(Entity) 식별
- 개체 간의 관계(Relationship) 정의
- ERD(Entity-Relationship Diagram) 작성
키(Key) 개념
- 기본키(Primary Key, PK)
각 레코드를 유일하게 식별하는 키
NULL 불가, 중복 불가
예: 학생 테이블의 학번 - 외래키(Foreign Key, FK)
다른 테이블의 기본키를 참조하는 키
테이블 간 참조 무결성 유지
예: 주문 테이블의 고객ID (→ 고객 테이블의 PK 참조)
예시: 개념적 모델링
(1) 학교 관리 시스템
- 학생(학번PK, 이름, 학년, 전공)
- 과목(과목코드PK, 과목명, 담당교수, 학점)
- 수강(학번FK, 과목코드FK)
→ 학생과 과목: 다대다 관계 (중간 테이블 수강 필요)
(2) 온라인 쇼핑몰
- 고객(고객IDPK, 이름, 이메일, 주소)
- 주문(주문번호PK, 주문일자, 총액, 고객IDFK)
→ 고객 1명 : 여러 주문 (일대다 관계)
(3) 도서관 관리 시스템
- 도서(ISBNPK, 제목, 저자, 출판사, 출판년도)
- 대출(대출번호PK, ISBNFK, 회원IDFK, 대출일, 반납예정일)
→ 도서 1권 : 여러 대출 가능 (일대다)
(4) 병원 관리 시스템 (복잡한 구조)
- 환자, 의사, 진료, 예약, 처방전, 약품 등 여러 개체
→ 다대다/일대다 복합 관계
→ 예: 진료 1건당 여러 약품 처방 가능 → 처방약품 중간 테이블 필요
핵심 포인트
- 사용자의 요구를 반영한 현실 세계 모델링
- 비즈니스 규칙과 데이터 관계를 명확히 정의
- 결과물: ER 다이어그램
2. 논리적 설계 (Logical Design)
논리적 설계는 개념적 설계의 ERD를 기반으로
관계형 데이터베이스(RDBMS)가 이해할 수 있는 테이블 구조로 변환하는 단계이다.
즉, **스키마(Schema)**를 정의하고, **정규화(Normalization)**를 적용한다.
목표
- ER 모델 → 릴레이션(테이블) 변환
- 정규화를 통한 중복 제거
- 무결성 제약 조건 설정
무결성 제약 조건
- 개체 무결성: 기본키는 NULL/중복 불가
- 참조 무결성: 외래키는 참조 대상 존재해야 함
- 도메인 무결성: 속성 값은 정의된 타입/범위 준수
- 사용자 정의 무결성: 비즈니스 규칙 기반 제약
정규화 (Normalization)
정규화는 데이터 구조를 체계화하여 **이상 현상(Anomaly)**을 방지하고
데이터의 일관성과 무결성을 유지하는 과정이다.
이상 현상
- 삽입 이상: 새로운 데이터 삽입 시 불필요한 데이터 필요
- 수정 이상: 한 데이터 수정 시 여러 곳 수정 필요
- 삭제 이상: 불필요하게 다른 정보까지 삭제됨
정규화 단계
단계조건설명
| 1NF | 원자성 | 컬럼은 더 이상 나눌 수 없는 값으로 구성 |
| 2NF | 부분 종속 제거 | 기본키 일부에만 종속된 속성 제거 |
| 3NF | 이행 종속 제거 | 비키 간 종속성 제거 |
| BCNF | 결정자 → 후보키 | 모든 결정자는 후보키여야 함 |
용어 정리
- 결정자(Determinant): 다른 속성을 결정하는 속성
- 후보키(Candidate Key): 유일성과 최소성을 만족하는 키
예시
- 주문 테이블: 주문번호(PK), 주문일자, 고객ID(FK)
- 고객 테이블: 고객ID(PK), 이름, 주소
→ 정규화를 통해 중복 최소화, 무결성 유지
3. 물리적 설계 (Physical Design)
논리적 설계를 기반으로 실제 DBMS에 데이터를 효율적으로 저장할 수 있도록 구체화하는 단계이다.
성능 향상, 저장 효율성, 접근 속도 등을 고려한다.
목표
- 물리적 저장 구조 설계
- 성능 최적화(인덱스, 파티셔닝, 클러스터링 등)
주요 요소
- 인덱스(Index)
자주 조회되는 컬럼에 인덱스 설정
검색 속도 향상 - 파티셔닝(Partitioning)
대용량 테이블을 분할 저장하여 관리 효율성 증대 - 스토리지 구성
RAID, 압축, 버퍼 관리 등 고려 - 뷰(View), 클러스터(Cluster) 활용 가능
예시
- 주문 테이블의 주문일자에 인덱스 생성
- 매출 테이블을 월별로 파티셔닝하여 관리
- 자주 조회되는 데이터 캐싱
정리
단계핵심 내용결과물
| 개념적 설계 | 개체·관계 식별, ER 다이어그램 작성 | ERD |
| 논리적 설계 | 테이블 스키마 설계, 정규화, 제약조건 설정 | 관계형 모델 |
| 물리적 설계 | 인덱스·파티셔닝 등 성능 최적화 | 실제 저장 구조 |
'DBMS > 개념' 카테고리의 다른 글
| 12_ ALTER문 (0) | 2025.10.01 |
|---|---|
| 11_ 제약 조건 (0) | 2025.09.29 |
| 09_ 날짜와 시간 함수 (0) | 2025.09.25 |
| 08_ DBMS 형변환 (0) | 2025.09.23 |
| 07_ DML의 심화 (0) | 2025.09.21 |