데이터의 구조와 관계를 미리 정의하는 과정!
=> 설계 없이 생성하면 트러블 슈팅이 생길 위험이 있어 구현전에 설계 과정이 필요하다.
요구사항 분석: 필요한 데이터 파악 → 요구사항 명세서
개념적 설계: 정보 구조화(추상화), DBMS 독립적(무시) → ER 다이어그램
논리적 설계: ERD를 테이블 구조로 변환 → 논리적 스키마
- 엔티티 => 사각형
- 애트리뷰트 => 타원
- 기본키 : 타원 안에 밑줄을 그어 표시
- 관계 => 마름모
물리적 설계: 실제 저장 구조, 인덱스 설정 → 물리적 스키마
구현: SQL로 실제 DB 생성
엔티티(Entity): 관리 대상 (사각형, 명사형)
애트리뷰트(Attribute): 엔티티의 속성 (타원, 기본키는 밑줄)
관계(Relationship): 엔티티 간 연결 (마름모, 동사형)
1:1: 한 사람이 하나의 주민번호를 가짐.
1:N: 한 선생님이 여러 학생을 지도함.
N:M: 여러 학생이 여러 과목을 수강함.
엔티티 → 테이블 / 애트리뷰트 → 컬럼
N:M 관계의 처리: 관계형 DB에서는 직접 표현이 불가능하여, 두 테이블 사이를 연결하는 '중간 테이블'이 반드시 필요함.
데이터베이스 설계의 목적 (좋은 설계란?)
핵심: 데이터의 중복을 최소화하고 일관성을 유지하는 것.
효과: 갱신 이상 방지, 정확성 유지, 효율적인 데이터 처리.
정보의 중복과 갱신 이상 (Anomaly)
설계가 잘못되어 데이터가 중복되면 다음과 같은 3가지 '이상 현상'이 발생합니다. (시험 단골 문제!)
함수적 종속성 (Functional Dependency)
정규화의 기준이 되는 아주 중요한 개념입니다.정의: 어떤 속성 A의 값을 알면 다른 속성 B의 값을 유일하게 결정할 수 있는 상태
예시: 학번을 알면 이름을 알 수 있으므로, 이름은 학번에 함수적으로 종속되어 있다고 합니다.
정규화 (Normalization) 단계복잡한 테이블을 무단계적으로 쪼개어 이상 현상을 제거하는 과정입니다.
① 제1정규형 (1NF)조건: 모든 속성값이 원자값(Atomic Value)이어야 함.의미: 한 칸(셀)에 값이 여러 개 들어있으면 안 되고, 무조건 하나씩만 들어가야 합니다.
② 제2정규형 (2NF)조건: 제1정규형을 만족하고, 완전 함수적 종속이어야 함.핵심: 기본키가 여러 속성으로 합쳐진 경우(복합키), 기본키의 일부에만 종속되는 속성(부분 함수적 종속)을 제거하는 단계입니다.쉽게 말해: "기본키 전체에 걸려있지 않고 일부에만 빌붙어 있는 애들을 따로 떼어내서 새 테이블을 만든다!"
③ 제3정규형 (3NF)조건: 제2정규형을 만족하고, 이행적 함수적 종속을 제거해야 함.이행적 종속이란?: 이고 일 때, 결과적으로 가 성립하는 관계.핵심: 기본키가 아닌 속성들끼리 서로 종속 관계가 있는 경우를 분리합니다. (예: 학번 학과명, 학과명 학과 사무실 번호)