데이터 모델링이란?
데이터 모델링 정의
데이터 모델링은 현실 세계의 복잡한 문제를 데이터베이스(DB)로 표현하기 위해 추상화하는 과정입니다. 고객의 비즈니스 프로세스를 분석하고 규칙을 정의하여 데이터를 효과적으로 모델링하고 분석 및 설계를 수행할 수 있도록 도와줍니다. 이를 통해 이해 관계자들과의 원활한 소통을 가능하게 하며, 이 과정을 단계별로 구체화하여, 데이터를 효과적으로 모델링하여 분석 및 설계 작업을 수행합니다.
데이터 모델링의 주요 특징
- 추상화 : 현실 세계의 데이터를 단순화하여 중요한 부분의 공통적인 특징을 찾고 단순하게 표현합니다.
- 단순화 : 현실을 단순화하여 핵심 요소에 집중하고, 복잡한 문제를 단순화하여 표현합니다.
- 명확화 : 데이터 모델이 모호하지 않도록 명확한 의미를 가지며, 하나의 의미를 전달할 수 있도록 설계합니다.
데이터 모델링의 3가지 관점
- 데이터 관점
- 업무를 고려하지 않으며, 비즈니스 프로세스에서 사용되는 데이터를 정적인 관점에서 분석합니다.
- 데이터가 어떻게 저장되고, 접근되고, 관리되는지 정의하는 단계입니다.
- 프로세스 관점
- 비즈니스 프로세스에서 수행하는 작업을 업무적으로 시나리오 분석이나 도메인 분석을 통해 동적으로 파악합니다.
- 시스템이 어떤 작업을 수행하며, 이러한 작업들이 어떻게 조직되고 조정되는지 정의하는 단계입니다.
- 데이터가 시스템 내에서 어떻게 흐르고 변환되는지 확인합니다.
- 데이터와 프로세스 간 관계
- CRUD 분석을 통해 데이터와 프로세스의 상호 작용을 명확하게 정의합니다.
- 데이터 관점과 프로세스 관점을 결합하여 시스템의 전반적인 동작을 이해하는 단계입니다.
- 특정 프로세스가 어떤 데이터를 사용하는지, 데이터가 어떻게 생성되고 변경되는지를 명확하게 정의합니다.
데이터 모델링 유의점
- 중복(Duplication)
- 한 테이블 또는 여러 테이블에 같은 정보를 저장하지 않도록 설계해야 합니다.
- 비유연성(Inflexibility)
- 데이터 정의를 프로세스와 분리하며, 사소한 업무 변화에 대해서도 잦은 모델 변경이 되지 않도록 주의해야 합니다.
- 비일관성(Inconsistency)
- 데이터 간 상호연관 관계를 명확하게 정의하며, 데이터베이스 내의 정보가 모순되거나 상반된 내용을 갖는 상태를 의미합니다.
- 데이터의 중복이 없더라도 비일관성을 발생할 수 있으며, 데이터 품질 관리가 필요합니다.
데이터 모델링 3단계
데이터 모델링은 보통 개념적 모델링, 논리적 모델링, 물리적 모델링 3단계로 점차 구체적으로 진행됩니다.
개념적 모델링 → 논리적 모델링 → 물리적 모델링
- 개념적 모델링
- 업무 중심적이고 포괄적(전사적)인 수준의 모델링으로 추상화 수준이 가장 높습니다.
- 업무를 분석한 뒤 업무의 핵심 엔터티를 도출하여 각 엔터티들의 관계들을 표현하기 위해 ERD를 작성합니다.
- 개념적 모델링은 사용자가 이해할 수 있도록 추상화된 수준으로 주요 엔터티와 속성을 도출합니다.
- 예를 들어, 고객 관리 시스템에서 고객과 계약 엔터티를 설정하고, 고객의 이름, 연락처 주소와 같은 속성을 정의합니다.
- 논리적 모델링
- 개념적 모델링을 구체화하는 단계로 핵심 엔터티의 세부속성, 식별자, 관계 등을 정의하는 단계입니다.
- 데이터 구조를 정의하기 때문에 비슷한 업무나 프로젝트에서 동일한 형태의 데이터 사용 시 재사용이 가능합니다.
- 동일한 논리적 모델을 사용하는 경우에 쿼리도 재사용이 가능합니다.
- 이 과정에서 정규화를 수행합니다.
- 예를 들어, 고객과 계약 엔터티 간의 관계를 1 : N으로 설정하여 고객은 여러 계약을 맺을 수 있게 표현합니다.
- 물리적 모델링
- 논리적 모델을 실제 DBMS에 맞춰 구현하는 단계로, DB의 성능, 보안, 가용성 등을 고려하여 테이블과 인덱스를 생성합니다.
- 가장 구체적인 데이터 모델링으로, 추상화 수준은 가장 낮은 단계입니다.
- 예를 들어, 고객 데이터를 고객 테이블에 저장하고, 인덱스를 고객 ID에 설정하여 조회 성능을 최적화합니다.
데이터베이스 3단계 스키마 구조
스키마란, 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타 데이터의 집합으로, 외부, 개념, 내부 스키마로 분리됩니다. 사용자의 관점과 실제 설계된 물리적인 방식을 분리하기 위해 고안되었습니다.
- 외부 스키마
- 사용자 관점에서 필요에 맞는 스키마로, 각 사용자 그룹의 요구사항을 반영한 뷰(View)를 제공합니다.
- 이 결과 만들어진 스키마는 논리적/물리적 모델링을 거쳐야 합니다.
- 개념 스키마
- 논리적 모델링 단계에서 만들어지는 스키마입니다.
- 사용자 관점의 스키마를 통합하여 데이터베이스의 전체 논리적 구조를 정의하는 스키마입니다.
- 전체 데이터베이스의 개체, 속성, 관계, 데이터 타입 등을 정의합니다.
- 내부 스키마
- 물리적 모델링 단계에서 만들어지는 스키마입니다.
- 데이터의 물리적 저장 구조와 컬럼, 인덱스 등을 정의하여 저장 및 성능 최적화를 수행합니다.
이렇게 3단계 스키마들은 한쪽이 변경되더라도 다른 쪽에서 영향을 받으면 안 되는 독립적인 구조를 가져야 합니다. 즉, 논리적/물리적 구조를 변경하더라도 사용자가 사용하는 응용 프로그램 및 서비스에 영향을 주지 않아야 합니다.
- 스키마의 독립성
- 논리적 독립성 : 논리적 데이터 구조가 변경(개념 스키마 변경)되더라도 응용 프로그램에 영향을 주면 안 됩니다.
- 물리적 독립성 : 물리적 데이터 구조가 변경(내부 스키마 변경)되더라도 개념/외부 스키마에 영향을 주면 안 됩니다.
ERD(Entity Relationship Diagram) 작성 방법
ERD는 엔터티와 엔터티 간의 관계를 시각적으로 표현한 다이어그램으로, 데이터 모델링의 표준 도구입니다.
- ERD 작성 절차
- 엔터티 도출 : 업무에서 관리해야 하는 집합을 도출하여 엔터티를 그립니다.
- 엔터티 배치 : 중요한 엔터티는 왼쪽 상단에 배치합니다.
- 엔터티 간 관계 설정 : 엔터티 간 관련성 파악하여 관계를 설정합니다.
- 관계명 서술 : 엔터티 간의 행위 or 존재, 관계명을 서술합니다.
- 관계 참여도 표현 : 한 엔터티와 다른 엔터티 간에 참여하는 관계의 수를 표시합니다.
- 관계 필수여부 표현 : 반드시 존재해야 하는지 or 아닌지 표시합니다.
데이터 모델의 3가지 구성 요소
- 대상(Entity) : 업무가 관리하고자 하는 대상(객체)입니다.
- 속성(Attribute) : 대상들이 갖는 속성입니다. (하나의 특징으로 정의될 수 있는 것입니다.)
- 관계(Relationship) : 대상들 간의 관계입니다.
엔터티(Entity)
현실 세계에서 독립적으로 식별 가능한 객체나 사물을 나타냅니다. 업무에서 관리해야 하는 데이터 또는 인스턴스 집합으로, 인스턴스는 엔터티의 특정한 속성 값들로 구성됩니다. 예를 들어, 학생, 고객, 제품 등이 엔터티가 될 수 있습니다.
엔터티의 특징
- 유일한 식별자(pk)에 의해 식별이 가능합니다. → 각 행들의 구분을 위해 필요합니다.
- 해당 업무에 필요하고 관리하고자 하는 정보입니다.
- 데이터가 최소 2개 이상의 인스턴스들의 집합입니다.
- 엔터티는 반드시 최소 2개 이상의 속성을 가집니다. 하나의 인스턴스는 각각의 속성에 대해 1개의 속성 값만 가져야 합니다.
- 엔터티는 업무 프로세스에 의해 이용되며, 업무와 관련이 없는 내용이거나 사용하지 않으면 삭제합니다.
- 다른 엔터티와 최소 1개 이상의 관계를 성립합니다. 독자적인 엔터티는 부적절하다고 판단합니다.
엔터티의 분류
- 유무형에 따른 분류
- 유형 엔터티 : 물리적인 형태(실체)가 있으며, 안정적이고 지속적으로 활용됩니다. 업무로부터 구분하기 쉬운 엔터티입니다.
- 개념 엔터티 : 물리적인 형태가 없으며, 관리해야 할 개념적 정보로부터 구분되는 엔터티입니다.
- 사건 엔터티 : 업무 수행에 따라 발생합니다. 발생량이 많고, 각종 통계 자료에서 이용됩니다.
- 발생 시점에 따른 분류
- 기본 엔터티
- 해당 업무에 원래 존재하는 정보로 다른 엔터티와 관계에 의해 생성되지 않고 독립적으로 생성된 엔터티입니다.
- 타 엔터티의 부모 역할을 하는 엔터티로, 다른 엔터티로부터 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가집니다.
- 예를 들어, 사원, 부서, 고객, 상품 등이 있습니다.
- 중심 엔터티
- 기본 엔터티에서 발생 및 파생하고, 업무에서 중심적인 역할을 하는 엔터티입니다.
- 많은 데이터가 발생하고 다른 엔터티와의 관계를 통해 많은 행위 엔터티를 생성합니다.
- 예를 들어, 계약(사원으로부터 파생), 사고, 청구, 주문 매출 등이 있습니다.
- 행위 엔터티
- 2개 이상의 부모 엔터티로부터 발생하는 엔터티로, 자주 내용이 바뀌거나 데이터 양이 증가합니다.
- 분석 초기 단계보다는 상세 설계 단계 또는 프로세스와 상관 모델링을 진행하면서 도출됩니다.
- 예를 들어, 주문(고객, 상품 엔터티로부터 발생), 사원 변경 이력 등이 있습니다.
- 기본 엔터티
엔터티의 명명 규칙
- 협업에서 실제로 사용하는 용어를 사용합니다.
- 약어 사용은 최대한 지양합니다.
- 단수 명사를 사용합니다.
- 모든 엔터티에서 중복이 안 되는 유일성을 보장해야 합니다.
- 엔터티의 의미를 명확하게 해야 합니다.
엔터티와 인스턴스의 표기법
속성(Attribute)
속성은 업무에서 필요로 하는 고유한 성질, 특징을 의미하며, 업무 상 인스턴스로 관리하고자 하는 더 이상 분리되지 않는 컬럼으로 표현할 수 있는 단위 데이터 단위입니다.
속성의 특징
- 해당 업무에 필요하고 관리하고자 하는 정보여야 합니다.
- 정해진 주식별자에 함수적 종속성을 가져야 합니다.
- 주식별자는 각 행들을 식별할 수 있는 식별자로, 이 주식별자에 의해 결정되는 요인이 함수적 종속성을 가져야 합니다.
- 예를 들어, 학번이 달라지면 이름이 달라지기 때문에 이름이라는 속성이 주식별자인 학번에 함수적 종속성을 가져야 합니다.
- 각 속성이 하나의 값을 가지고 있어야 하며 이를 속성의 원자성이라고 합니다.
- 원자성이란, 데이터 모델에서 각 엔터티의 인스턴스가 해당 속성에 대해 단일하고 명확한 값을 가지는 특성입니다.
함수의 종속성
한 속성의 값이 다른 속성의 값에 종속적인 관계를 갖는 특징입니다. 즉, 어떤 속성 A의 값에 의해 다른 속성 B도 유일하게 결정된다면, B는 A에 함수적으로 종속됐다고 하며, 수식으로는 A → B라고 표현합니다.
- 완전 함수적 종속
- 특정 컬럼이 기본키에 대해 완전히 종속될 때를 얘기합니다.
- PK를 구성하는 컬럼이 2개 이상일 경우, PK 값 모두에 의한 종속 관계를 나타낼 때 완전 함수 종속성을 만족합니다.
- 예를 들어, 주문번호와 제품번호에 의해 수량 컬럼의 값이 결정되는 경우가 있습니다.
- 부분 함수적 종속
- 기본키 일부에 대해 종속될 때를 얘기합니다.
- 예를 들어, PK의 일부인 과목에 의해서 교수가 결정될 경우가 있습니다.
엔터티, 인스턴스, 속성, 속성 값의 관계
- 한 개의 엔터티는 2개 이상의 인스턴스 집합이어야 합니다. → 하나의 테이블은 두 개 이상의 행을 가집니다.
- 한 개의 엔터티는 2개 이상의 속성을 가집니다. → 하나의 테이블은 두 개 이상의 컬럼을 가집니다.
- 한 개의 속성은 1개의 속성 값을 가집니다.
- 속성은 텐터티에 대해 자세하고 구체적인 값을 가져야 합니다.
속성의 분류
- 특성에 따른 분류
- 기본 속성 : 업무로부터 추출된 모든 속성으로 일반적으로 가장 많이 존재하는 속성입니다.
- 설계 속성 : 업무를 규칙화하기 위해 기본 속성 외에 새로 만들어지거나 변형된 속성입니다.
- 파생 속성 : 다른 속성에 만들어지는 속성으로 계산된 값입니다. 데이터 정합성을 위해 가급적 적게 정의해야 합니다.
- 엔터티 구성방식에 따른 분류
- PK(Primary Key, 기본키) : 인스턴스를 식별할 수 있는 속성입니다.
- FK(Foreign Key, 외래키) : 다른 엔터티와의 관계에서 포함된 속성입니다.
- 일반 속성 : 엔터티에 포함되어 있으나, PK, FK가 아닌 속성입니다.
- 분해 여부에 따른 분류
- 단일 속성 : 하나의 의미로 구성되어 있는 속성입니다.
- 복합 속성 : 여러 개의 의미로 구성되어 있는 속성입니다.
- 다중값 속성 : 여러 개의 값을 가질 수 있는 속성으로 엔터티로 분해해야 합니다.
속성의 명명규칙
- 업무에서 사용하는 이름을 사용해야 합니다.
- 서술식 속성명은 사용하지 않습니다.
- 약어의 사용은 최대한 지양합니다.
- 전체 데이터 모델에서 유일한 명칭이어야 합니다.
도메인
도메인이란, 각 속성이 가질 수 있는 값의 범위입니다.
엔터티 내에서 속성에 대한 데이터 타입, 크기, 제약사항 등을 지정하는 것입니다.
관계
관계는 엔터티 간의 연관성을 나타내는 개념입니다. 관계를 정의할 때는 인스턴스 간의 연결고리를 고려해야 합니다.
- 관계의 구성
- 관계명
- 관계차수
- 선택성
관계의 종류
관계는 아래와 같은 2가지 종류로 ERD에서 구분해서 표시하지는 않습니다.
- 존재적 관계 : 한 엔터티의 존재가 다른 엔터티의 존재에 영향을 미치는 관계입니다. (부서와 사원의 관계)
- 행위적 관계 : 엔터티 간의 어떤 행위가 있는 것을 의미합니다. (고객과 주문의 관계)
관계의 차수
한 엔터티의 인스턴스가 다른 엔터티의 인스턴스와 어떻게 연결되는지를 나타내는지 1:1, 1:N, N:M 등으로 표현할 수 있습니다.
- 1 : 1 관계
- 완전 1 : 1 관계 : 하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재하는 경우입니다. (사원과 부서)
- 선택적 1 : 1 관계 : 하나의 엔터티에 관계없는 엔터티가 없을 수 있는 경우입니다.(발령 전 사원과 부서)
- 1 : N 관계 : 엔터티 하나의 행에 다른 엔터티의 값이 여러 개 있는 관계입니다. (고객과 계좌)
- N : M 관계 : 이 경우 조인 시 카타시안 곱이 발생할 수 있으며, 두 엔터티를 연결하는 연결 엔터티를 통해 1: N 관계를 맺어야 합니다.
관계의 페어링
관계의 페어링이란, 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것을 의미합니다.
관계란, 페어링의 집합을 의미합니다.
관계의 차수는 하나의 엔터티와 다른 엔터티 간의 레코드 연결 방식을 나타냅니다.
관계의 페어링은 두 엔터티 간의 특정 연결을 설명하고 추가 정보를 제공하는 용도로 사용됩니다.
관계 간 엔터티의 구분
- 강한 개체 : 독립적으로 존재할 수 있는 엔터티로, 고객과 계좌 엔터티 중 고객은 독립적으로 존재할 수 있습니다.
- 약한 개체 : 독립적으로 존재할 수 없는 엔터티로, 고객과 계좌 중 계좌 엔터티는 독립적으로 존재할 수 없습니다.
식별자
식별자는 하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성입니다. 하나의 엔터티에는 유일한 식별자가 존재해야 하며 이는 논리 모델링에서 사용하는 용어입니다. 물리적 모델링에서는 식별자가 아니 키(Key)라고 표현합니다.
- 주식별자의 특징
- 유일성 : 주식별자에 의해 모든 인스턴스를 유일하게 구분해야 합니다.
- 최소성 : 유일성을 만족하는 최소한의 속성으로 구성해야 합니다.
- 불면성 : 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 합니다.
- 존재성 : 반드시 값이 존재해야 합니다. NULL은 허용이 안됩니다.
- 주식별자의 도출 기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정합니다. 같은 식별자 조건을 만족하더라도 업무적으로 더 많이 사용되는 속성을 주식별자로 지정합니다.
- 명칭이나 내역 등과 같은 이름은 피해야 합니다. (부서명보다는 부서 코드를 사용합니다.)
- 속성의 수를 최대한 적게 구성해야 합니다. (조인으로 인한 성능 저하 발생을 예방하기 위해서입니다.)
식별자의 분류
- 대표성 여부에 따른 식별자 분류
- 주식별자
- 유일성과 최소성을 만족하며 엔터티 내에서 각 인스턴스를 유일하게 구분할 수 있는 대표 식별자입니다.
- 타 엔터티와의 참조 관계를 연결할 수 있습니다.
- 보조 식별자
- 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자입니다.
- 유일성과 최소성은 만족하지만 대표성을 갖지 못하며, 참조 관계 연결을 할 수 없는 식별자입니다.
- 주식별자
- 생성 여부에 따른 식별자 분류
- 어떤 엔터티에서는 내부 식별자로 정의되던 컬럼이 다른 엔터티에서는 외부 식별자로 정의될 수 있습니다.
- 내부 식별자 : 다른 엔터티의 참조 없이 엔터티 내부에서 스스로 생성되는 식별자입니다.
- 외부 식별자 : 다른 엔터티와 관계로 인해 만들어지는 식별자입니다.
- 속성 수에 따른 식별자 분류
- 단일 식별자 : 하나의 속성으로 구성되는 식별자입니다.
- 복합 식별자 : 2개 이상의 속성으로 구성되는 식별자입니다.
- 대체 여부에 따른 식별자 분류
- 본질 식별자 : 비즈니스 프로세스에서 만들어지는 식별자로 꼭 필요합니다.
- 인조 식별자 : 인위적으로 만들어지는 식별자로, 필수적이지는 않지만 관리의 편의성 등의 이유로 만들어집니다.
- 어떤 엔터티, 비즈니스 모델에서 만들어지는지에 따라 하나의 속성이 다르게 정의될 수 있습니다. 인조 식별자는 중복 데이터가 발생할 수 있어 데이터 품질이 저하될 수 있으며, 불필요한 인덱스를 생성해 저장공간 낭비 또는 DML 성능을 저하시킬 수 있습니다.
본질 식별자와 인조 식별자
- 본질 식별자
- 업무에 의해 만들어지는 꼭 필요한 식별자입니다.
- 인조 식별자
- 인위적으로 만들어지는 식별자로, 꼭 필요하지 않지만 관리의 편의성 등의 이유로 인위적으로 만듭니다.
- 본질 식별자가 복잡한 구성을 가질 때 인위적으로 생성됩니다.
- 주로 각 행을 구분하기 위한 기본키로 사용되며 자동으로 증가하는 일련번호 같은 형태입니다.
- 중복 데이터가 발생할 가능성이 있어 데이터 품질을 저하시킬 수 있습니다.
- 불필요한 인덱스를 생성하여 저장공간을 낭비하고 DML 성능을 저하시킵니다.
인덱스는 원래 조회 성능을 향상시키기 위한 객체로, 인덱스는 DML(INSERT/UPDATE/DELTE) 시 INDEX SPLIT 현상으로 인해 성능이 저하됩니다.
식별자의 표기법
식별 관계와 비식별 관계
- 식별 관계
- PK를 서로 PK로 가지고 있는 관계입니다. PK 중 하나로 공유해도 괜찮습니다.
- ERD에서는 실선으로 표시됩니다.
- 비식별 관계
- PK를 서로 PK로 가지지 않는 관계입니다. 강한 개체의 PK를 다른 엔터티에서는 일반 속성으로 가집니다.
- ERD에서는 점선으로 표시합니다.
키(Key)의 종류
논리 모델링의 식별자가 물리 모델링을 거쳐 Key로 사용됩니다.
- 기본키(Primary Key) : 엔터티를 대표할 수 있는 키입니다.
- 후보키(Candidate key) : 유일성과 최소성을 만족하며, 후보 키들 중 하나가 기본키가 되며 나머지는 대체키가 됩니다.
- 대체키(Alternate Key) : 여러 후보키 중 기본키가 아닌 키입니다.
- 슈퍼키(Super Key) : 유일성은 만족하지만 최소성을 만족하지 않습니다.
- 외래키(Foreign Key) : 다른 테이블의 기본키를 참조하는 키입니다.
Ref.
'Qualifications[자격증] > SQLD' 카테고리의 다른 글
[SQLD] 5장. SQL 관리 구문 (0) | 2024.11.16 |
---|---|
[SQLD] 4장. SQL 활용과 고급 기능 (0) | 2024.11.15 |
[SQLD] 3장. SQL 기본 개념 및 활용 가이드 (1) | 2024.11.12 |
[SQLD] 2장. 데이터 모델과 정규화 (0) | 2024.11.11 |