- 데이터베이스 시스템을 설계하는 과정에서 데이터를 구조화하여 정의, 설계, 구현 및 관리하는 일련의 단계를 의미합니다. - 이는 조직의 데이터의 요구사항을 분석하고 정의하여, 이를 기반으로 데이터베이스의 구조를 설계를 합니다. - 데이터 모델링의 과정으로 개념적 모델링, 논리적 모델링, 물리적 모델링의 단계를 가집니다. 이러한 단계를 통해 추상적인 개념을 구체적인 개념으로 변화되는 과정입니다.
💡 개념적 모델링(Conceptual, Contextural Modeling) - 데이터 모델링의 첫 번째 단계로, 조직의 데이터 ‘요구사항을 분석하고 정의’합니다. - 이 단계에서는 비즈니스의 전반적인 데이터 구조를 이해하고 주요 테이블과 그들 간에 관계를 식별하여 ERD(Entity-Relationship Diagram)를 사용하여 시각적으로 표현합니다. 이를 통해 데이터 구조의 큰 그림을 파악할 수 있습니다. - 이 단계에서는 데이터베이스의 구체적인 구현보다는 비즈니스 요구사항을 충족시키는 데 중점을 둡니다.
💡 개념적 모델링 E-R 다이어그램
- 고객의 요구사항에 대해서 개념적 모델링 과정인 E-R 다이어그램 작성을 통해서 시각적으로 표현이 되고 이를 통해 데이터 구조의 큰 그림을 파악할 수 있습니다.
💡 논리적 모델링(Logical Modeling) - 개념적 모델링 단계에서 정의된 데이터를 기반으로 데이터베이스 구조를 보다 구체적으로 설계하는 과정입니다. 해당 과정에서는 데이터 타입, 길이, 키 및 제약 조건과 같은 세부 사항을 정의합니다.
- 논리적 모델링은 특정 데이터베이스 관리 시스템(DBMS)에 의존하지 않으며, 데이터베이스의 논리적 구조를 표현합니다. - 이를 통해 데이터의 무결성, 일관성 및 효율성을 보장할 수 있는 데이터베이스 스키마를 설계합니다. - ERD(Entity-Relationship Diagram)를 사용하여 테이블, 컬럼 및 관계를 시각적으로 표현합니다.
💡 논리적 모델링 : ERD
- 이전에 작성한 E-R 다이어그램을 기반으로 논리적 모델링 단계에서는 좀 더 구체적으로 설계하는 과정입니다. - 이는 테이블을 도출하고 컬럼에 대해 데이터 타입, 길이, 키 및 제약 조건등을 정의하며 각 테이블 간의 관계를 정의합니다.
- 데이터베이스 설계 과정에서 ‘데이터의 중복을 최소화’하고 데이터 무결성을 유지하며 테이블 간의 관계를 단순하게 하여 데이터 구조화를 이루는 단계를 의미합니다. - 정규화는 여러 단계로 나뉘며, 각 단계는 이전 단계에서 해결되지 않은 데이터 중복 문제와 같은 ‘데이터 이상 현상’을 제거하는 것을 목표로 합니다. - 정규화의 단계는 일반적으로 3NF까지 수행하지만 BCNF 적용하는 경우도 있습니다.
[ 더 알아보기 ] 💡데이터 무결성(Data Integrity)
- 데이터베이스 내의 데이터가 정확하고 일관되며 신뢰할 수 있는 상태를 유지한 상태를 의미합니다. - 이는 데이터의 정확성, 완전성, 일관성을 보장하여 데이터의 신뢰성을 유지하는 중요한 개념입니다.
💡 제1정규화(1NF) : 원자성 - 모든 테이블의 컬럼의 값이 ‘원자값(Atomic Value)’만을 가지도록 하는 과정을 의미합니다. - 즉, 원자 값은 테이블 내에서 컬럼은 ‘단일한 값만을 가지도록 보장’하며 중복되는 여러 개의 값이 포함되지 않아야 합니다.
- 이를 통해 데이터 중복을 줄이고 데이터베이스를 보다 효율적으로 관리할 수 있습니다.
💡 사용 예시 : 제1정규화 적용 이전 → 제1정규화 적용 이후 - ‘상품 테이블’의 컬럼으로 ‘상품 소유자 정보’가 포함될 때, 데이터가 ‘홍길동, 김길동’과 같이 여러 개의 값으로 입력이 되어있다면, 제1 정규화에 위배가 됩니다. - 이 경우 소유자를 별도의 테이블로 분리하여 각 소유자가 하나의 행내에 표현되도록 해야합니다.
[ 더 알아보기 ] 💡 원자 값(Atomic Value)
- 데이터베이스 테이블의 각 컬럼이 더 이상 분해할 수 없는 단일 값을 가지는 것을 의미합니다. - 이는 각 컬럼이 하나의 값만을 포함하도록 보장하여 데이터의 중복을 방지하고, 데이터베이스의 무결성을 유지하는 데 중요한 역할을 합니다. - 예를 들어, 사용자 테이블 내의 “주소”라는 컬럼 내에 서울시 강남구"와 같은 값을 저장하는 대신, "도시", "구"와 같은 개별 컬럼으로 나누어 각각의 원자 값을 저장하는 것입니다. - 이를 통해 데이터베이스는 보다 효율적으로 관리되고, 쿼리의 성능도 향상될 수 있습니다.
- 제2정규화 조건을 만족하면서, ‘이행적 종속'을 제거하는 과정을 의미합니다. A가 B를 결정하고 B가 C를 결정할 때, A가 C를 결정하는 관계를 의미합니다. - 즉, 기본키가 아닌 모든 속성 간에는 서로 종속될 수 없음을 의미합니다.
💡 사용예시 : 제3정규화(3NF) 적용 이전 → 제3정규화(3NF) 적용 이후
- ‘학생 테이블’에 학생 ID, 학과 ID, 학과 명 컬럼이 있을 때, 학과 ID가 학과명을 결정하고 학과명이 학생 ID에 종속된다면 이는 이행적 종속 관계입니다. - 이러한 경우, 제3정규화에 위배되기에 학과 정보를 별도의 테이블로 분리하여 종속성을 제거해야 합니다.
💡 BCNF(Boyce and Codd Normal Form) - 제3 정규형(3NF)의 강화된 형태로, 데이터베이스 테이블의 모든 결정자가 후보 키(candidate key)여야 한다는 조건을 추가로 요구합니다. 즉, 모든 결정자는 후보키에 속해야 함을 의미합니다. - 이 정규형은 제3 정규형을 만족하면서도 특정한 이상 현상을 방지하기 위해 정의되었습니다.
💡 사용예시 : BCNF(Boyce and Codd Normal Form) 적용 이전 → BCNF(Boyce and Codd Normal Form) 적용 이후
-학생 ID와 과목이 기본 키(primary key)입니다. 그러나 과목이 교수를 결정하는 관계가 있으므로, 과목은 결정자입니다. - 이 경우 과목이 후보 키(candidate key)가 아니기 때문에 BCNF를 위배하게 됩니다.
- 제3정규화와 BCNF를 만족하면서, 다치 종속성(Multi-valued dependency)을 제거하는 과정을 의미합니다. 이는 하나의 속성이 여러 개의 값을 가질 수 있는 경우를 의미합니다. - 다치 종속성을 제거하기 위해서는 해당 속성을 별도의 테이블로 분리하여 각 속성이 단일 값을 가지도록 해야 합니다. 이를 통해 데이터베이스의 무결성과 일관성을 유지할 수 있습니다.
💡 사용예시 : 제4정규화 적용 이전 → 제4정규화 적용 이후
- '학생 테이블'에 학생 ID, 전화번호, 과목 컬럼이 있습니다. - 한 학생이 여러 개의 전화번호와 여러 개의 과목을 가질 수 있으며, 전화번호와 과목 간에 다치 종속성이 발생합니다.
- 제4정규화를 만족하면서, 조인 종속성(Join Dependency)을 제거하는 과정을 의미합니다. 이는 하나의 릴레이션을 여러 개의 작은 릴레이션으로 분해할 때, 이들 작은 릴레이션을 다시 조인하여 원래의 릴레이션을 복원할 수 있는 경우를 말합니다. - 이는 매우 고도의 정규화 단계로, 대부분의 실용적인 데이터베이스 설계에서는 제4정규화까지 적용한 후 제5정규화를 적용할 필요가 없는 경우가 많습니다.
💡 사용예시 : 제5정규화 적용 이전 → 제5정규화 적용 이후
- '프로젝트 테이블'에 프로젝트 ID, 직원 ID, 역할 컬럼이 있습니다. 한 프로젝트에 여러 직원이 여러 역할을 가질 수 있으며, 직원과 역할 간에 조인 종속성이 발생합니다. - 이를 해결하기 위해 '프로젝트-직원' 테이블과 '직원-역할' 테이블로 분리하여 각각의 관계를 독립적으로 다루도록 합니다.