데이터 모델의 종류
데이터 모델은 다양한 방식으로 현실 세계를 표현할 수 있으며, 그에 따라 여러 가지 유형이 있습니다. 주요 데이터 모델에는 다음과 같은 종류가 있습니다.
1. 계층적 데이터 모델 (Hierarchical Data Model)
계층적 데이터 모델은 트리(Tree) 구조를 사용하여 데이터를 상위와 하위 레코드로 구성합니다. 이 모델에서는 자식 레코드가 하나의 부모 레코드에만 속할 수 있어, 일대다(1
) 관계를 표현합니다.
- 특징: 단순한 구조, 빠른 데이터 접근
- 제한: 복잡한 다대다(N) 관계를 표현하기 어려움
2. 네트워크 데이터 모델 (Network Data Model)
네트워크 데이터 모델은 계층적 모델의 확장으로, 하위 레코드가 여러 상위 레코드와 연결될 수 있어 다대다(N
) 관계를 표현할 수 있습니다. 이 모델은 주로 CODASYL 모델이라고 불리며, 복잡한 데이터 구조를 처리하는 데 유용합니다.
- 특징: 복잡한 관계 표현 가능, 유연성 높음
- 제한: 구조가 복잡하고, 관리가 어려움
3. 개체-관계형 데이터 모델 (Entity-Relationship Data Model)
개체-관계형 데이터 모델(ER 모델)은 개체(Entity), 속성(Attribute), 관계(Relationship)를 사용하여 데이터 요소와 그들 간의 관계를 표현합니다. 이 모델은 ER 다이어그램(ERD)을 통해 시각적으로 표현되며, 시스템 요구사항을 명확히 정의하고 커뮤니케이션 도구로 사용됩니다.
- 특징: 직관적 표현, 설계 및 분석에 유용
- 제한: 물리적 데이터베이스 구현에 추가적인 변환이 필요
4. 관계형 데이터 모델 (Relational Data Model)
관계형 데이터 모델은 데이터를 테이블(릴레이션)의 형태로 구성하며, 각 테이블은 행(레코드)과 열(필드)로 이루어져 있습니다. 관계형 데이터베이스는 이 모델을 기반으로 하며, SQL을 사용하여 데이터를 관리합니다.
- 특징: 강력한 이론적 기반, 널리 사용됨
- 제한: 복잡한 객체와 관계를 표현하는 데 제한적
5. 차원 데이터 모델 (Dimensional Data Model)
차원 데이터 모델은 주로 데이터웨어하우스와 OLAP(Online Analytical Processing) 시스템에서 사용되며, 데이터를 분석하기 쉽게 구조화합니다. 이 모델은 팩트 테이블과 차원 테이블로 구성됩니다.
- 특징: 데이터 분석에 최적화, 높은 성능
- 제한: 실시간 트랜잭션 처리에는 부적합
6. 객체지향 데이터 모델 (Object-Oriented Data Model)
객체지향 데이터 모델은 객체지향 프로그래밍의 개념을 데이터베이스 설계에 적용한 모델입니다. 데이터는 객체로 표현되며, 객체는 속성과 메서드를 가집니다.
- 특징: 복잡한 데이터 구조 표현 가능, 재사용성 높음
- 제한: 관계형 모델에 비해 복잡함, 널리 사용되지 않음
7. 그래프 데이터 모델 (Graph Data Model)
그래프 데이터 모델은 노드(개체)와 에지(관계)를 사용하여 데이터를 그래프 형태로 표현합니다. 이 모델은 소셜 네트워크, 지리 정보 시스템(GIS), 추천 시스템 등에서 유용하게 사용됩니다.
- 특징: 복잡한 관계 표현에 적합, 유연성 높음
- 제한: 데이터베이스 관리가 복잡할 수 있음
8. 벡터 데이터 모델 (Vector Data Model)
벡터 데이터 모델은 자연어 처리나 GIS에서 사용되는 모델로, 데이터를 점, 선, 다각형으로 표현하여 공간 정보를 관리합니다.
- 특징: 공간 데이터의 정밀한 표현
- 제한: 비공간 데이터 표현에 적합하지 않음
9. 계층적 데이터 모델 (Hierarchical Data Model)
- 구조: 상위 및 하위 레코드 간의 트리(Tree) 구조를 사용하여 데이터를 구성합니다.
- 관계: 각 자식 레코드는 하나의 부모만 가질 수 있으며, 일대다(1) 관계로 모델링됩니다.
- 역사: 주로 메인프레임 데이터베이스에서 시작되었으며, 메인프레임 시대의 초기 데이터베이스 시스템에서 많이 사용되었습니다.
- 현재 상황: 대부분의 시스템에서 관계형 데이터 모델로 대체되었습니다.
10. 네트워크 데이터 모델 (Network Data Model)
- 구조: 계층적 데이터 모델의 확장된 형태로, 하위 레코드를 여러 상위 레코드에 연결하여 다대다(N) 관계로 모델링할 수 있습니다.
- 별칭: 네트워크 데이터 모델은 CODASYL 모델이라고도 합니다.
- 특징: 계층적 모델의 제약을 해결하여 더 복잡한 관계를 표현할 수 있도록 설계되었습니다.
11. 개체-관계형 데이터 모델 (Entity-Relationship Data Model)
- 구조: 시스템의 데이터 요소(개체, 속성)와 이들 간의 관계를 정의하는 상위 수준의 데이터 모델입니다.
- 사용: 주로 커뮤니케이션 도구로 사용되며, 개체(Entity), 속성(Attribute), 관계(Relationship)를 ER 다이어그램(ERD) 형태로 시각적으로 표현합니다.
- 특징: ER 다이어그램을 통해 시스템 내에서 개체 간의 관계를 쉽게 이해하고 설계할 수 있습니다.
관계형 데이터 모델 (Relational Data Model)
- 역사: 계층 및 네트워크 데이터 모델의 제약을 극복하기 위해 개발된 보다 유연한 대안입니다.
- 구조: 데이터는 **테이블(릴레이션, Relation)**에 저장됩니다. 각 테이블은 최소 0개 이상의 **행(Row)**과 1개 이상의 **열(Column)**로 구성됩니다.
- 열(Column): 테이블의 각 항목들을 나타내며 **필드(Field)**나 **속성(Attribute)**이라고도 합니다.
- 행(Row): 여러 열의 집합으로, 레코드(Record) 또는 **튜플(Tuple)**이라고도 합니다.
- 기본키(Primary Key): 각 테이블에서 레코드를 고유하게 식별하는 속성입니다.
- 관계 표현: 테이블 간의 관계를 표현하는 것이 특징이며, 개체-관계형 데이터 모델에 비해 테이블 간의 관계를 도출하기가 쉽습니다.
차원 데이터 모델 (Dimensional Data Model)
- 용도: 주로 비즈니스 인텔리전스(BI) 애플리케이션을 지원하는 데이터 웨어하우스나 데이터 마트에서 사용됩니다.
- 구조: **팩트 테이블(Fact Table)**과 **차원 테이블(Dimension Table)**로 구성됩니다.
- 팩트 테이블: 비즈니스의 측정값(예: 매출, 수익 등)을 포함하며, 분석의 중심이 됩니다.
- 차원 테이블: 비즈니스 관점이나 분석 대상(예: 시간, 지역, 제품 등)을 포함하며, 팩트 테이블과 연결되어 데이터를 다차원적으로 분석할 수 있습니다.
객체지향 데이터 모델 (Object-Oriented Data Model)
- 구조: **객체(Object)**로 데이터를 모델링하며, 객체는 하나 이상의 **속성(Property)**과 **동작(Method)**을 가집니다.
- 클래스: 속성과 동작이 동일한 여러 객체를 그룹화할 수 있으며, 새로운 클래스는 기존 클래스의 속성과 동작을 상속할 수 있습니다.
- 특징: 복잡한 구조의 정보 모델링이 가능하다는 장점이 있으나, 안정성과 성능의 문제로 인해 현재는 특수한 전문 분야 외에는 잘 사용되지 않습니다.
그래프 데이터 모델 (Graph Data Model)
- 기원: 네트워크 및 계층형 데이터 모델로부터 파생된 모델입니다.
- 사용 사례: 주로 소셜 네트워크, 추천 엔진, 사기 탐지 애플리케이션 등 복잡한 관계가 포함된 데이터 집합을 표현하는 데 사용됩니다.
구성 요소
- 노드(Node): 그래프 데이터 모델에서 개별 **엔티티(Entity)**를 나타냅니다. 예를 들어, 소셜 네트워크에서는 사용자 하나하나가 노드로 표현될 수 있습니다.
- 엣지(Edge): 노드 간의 관계를 나타내며, 각 엣지는 노드들 사이의 연결을 의미합니다. 예를 들어, 두 사용자 간의 친구 관계가 엣지로 표현될 수 있습니다.
- 속성(Property): 노드의 특성을 나타냅니다. 각 노드에는 다양한 속성이 포함될 수 있으며, 이 속성을 통해 노드의 세부 정보를 정의할 수 있습니다. 예를 들어, 사용자의 이름, 나이, 관심사 등이 속성으로 표현될 수 있습니다.
특징
- 유연성: 그래프에 새로운 노드와 엣지를 쉽게 추가할 수 있어 특정 비즈니스 요구사항을 수용하기 위한 모델링이 매우 유연합니다.
- 관계 이해 용이성: 데이터 내의 관계를 직관적으로 이해할 수 있어 복잡한 관계를 가진 데이터 집합에 적합합니다.
- 실시간 쿼리: 실시간 쿼리가 중요한 애플리케이션에서 효율적으로 사용할 수 있습니다. 복잡한 관계형 데이터에서 빠르게 필요한 정보를 조회할 수 있어 실시간 분석이 필요한 경우에 특히 유리합니다.
데이터 정의어 (DDL)
데이터 정의어(Data Definition Language, DDL)는 데이터베이스에서 테이블, 인덱스, 뷰와 같은 객체를 생성, 수정, 삭제하는 명령어입니다. 주요 DDL 명령어는 다음과 같습니다:
- CREATE: 데이터베이스, 테이블, 뷰, 인덱스 등 새로운 객체를 생성합니다.
- ALTER: 기존 객체를 수정합니다. 예를 들어, 테이블에 컬럼을 추가하거나 삭제할 수 있습니다.
- DROP: 객체를 삭제합니다.
-- 데이터베이스 생성 CREATE DATABASE 데이터베이스명; -- 테이블 생성 CREATE TABLE 테이블명 ( 컬럼1 데이터타입 제약조건, 컬럼2 데이터타입 제약조건, ... ); -- 테이블 수정 ALTER TABLE 테이블명 ADD COLUMN 새컬럼 데이터타입; -- 테이블 삭제 DROP TABLE 테이블명; |
데이터타입
데이터베이스에서 사용하는 데이터타입은 데이터를 저장할 때 필요한 공간과 형식을 정의합니다. 주요 데이터타입은 다음과 같습니다:
- 문자형 데이터타입
- CHAR: 고정 길이 문자형 데이터타입.
- VARCHAR: 가변 길이 문자형 데이터타입.
- TEXT: 긴 텍스트 데이터를 저장하는 데이터타입.
- 숫자형 데이터타입
- 정수형: TINYINT, SMALLINT, INT, BIGINT 등.
- 실수형: FLOAT, DOUBLE, DECIMAL 등.
- 날짜시간형 데이터타입
- DATE: 날짜만 저장.
- TIME: 시간만 저장.
- DATETIME: 날짜와 시간을 함께 저장.
- TIMESTAMP: 날짜와 시간을 시간대와 함께 저장.
- 이진형 데이터타입
- BINARY: 고정 길이 이진 데이터 저장.
- VARBINARY: 가변 길이 이진 데이터 저장.
- BLOB: 큰 이진 객체 저장.
- 공간형 데이터타입
- GEOMETRY: 공간 데이터를 저장하며, POINT, LINESTRING, POLYGON 등으로 세분화됩니다.
제약조건
제약조건은 데이터의 무결성을 유지하기 위해 설정하는 규칙입니다. 주요 제약조건은 다음과 같습니다:
- PRIMARY KEY: 테이블의 각 레코드를 유일하게 식별하는 키.
- NOT NULL: 컬럼에 NULL 값을 허용하지 않음.
- UNIQUE: 컬럼의 값이 유일해야 함을 보장.
- CHECK: 특정 조건을 만족해야 함을 정의.
- DEFAULT: 값이 입력되지 않을 경우 기본 값을 설정.
- FOREIGN KEY: 다른 테이블의 기본키를 참조하여 데이터 무결성을 보장.
-- 기본키 제약조건 설정 CREATE TABLE 테이블명 ( 컬럼명 데이터타입 PRIMARY KEY ); -- NOT NULL 제약조건 설정 ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 NOT NULL; -- UNIQUE 제약조건 설정 CREATE TABLE 테이블명 ( 컬럼명 데이터타입 UNIQUE ); -- FOREIGN KEY 제약조건 설정 ALTER TABLE 자식테이블 ADD CONSTRAINT fk_부모 FOREIGN KEY (부모컬럼) REFERENCES 부모테이블(부모컬럼); |
뷰 (VIEW)
뷰는 하나 이상의 테이블을 기반으로 생성된 가상의 테이블입니다. 물리적으로 데이터를 저장하지 않고, 쿼리 결과를 가상 테이블로 제공합니다.
장점:
- 데이터 중복성 최소화
- 데이터 보안성 강화
- 간편한 데이터 접근
- 데이터 가상화 제공
-- 뷰 생성 CREATE VIEW 뷰명 AS SELECT 컬럼1, 컬럼2 FROM 테이블명 WHERE 조건; -- WITH CHECK OPTION 사용 예 CREATE VIEW 뷰명 AS SELECT 컬럼1, 컬럼2 FROM 테이블명 WHERE 조건 WITH CHECK OPTION; |
인덱스 (Index)
인덱스는 데이터베이스 테이블에서 검색 성능을 향상시키기 위해 사용됩니다.
- 기본 인덱스 (Primary Index): 클러스터형 인덱스이며, 테이블의 기본키에 대해 행 데이터가 정렬됩니다.
- 보조 인덱스 (Secondary Index): 비클러스터형 인덱스이며, 기본 인덱스 이외의 인덱스입니다.
-- 기본 인덱스 생성 CREATE TABLE 테이블명 ( 컬럼1 데이터타입 PRIMARY KEY ); -- 보조 인덱스 생성 CREATE INDEX 인덱스명 ON 테이블명 (컬럼명); |
옵티마이저 (Optimizer)
MySQL의 옵티마이저는 쿼리를 가장 효율적으로 실행하기 위한 계획을 세우는 역할을 합니다. 테이블 크기, 인덱스 품질, 통계 정보 등을 기반으로 실행 계획을 결정합니다.
-- EXPLAIN 사용 예 EXPLAIN SELECT * FROM 테이블명 WHERE 조건; -- EXPLAIN ANALYZE 사용 예 EXPLAIN ANALYZE SELECT * FROM 테이블명 WHERE 조건; |
윈도우 함수 (Window Function)
윈도우 함수는 OLAP(Online Analytical Processing)에서 데이터를 분석할 때 유용한 함수입니다. 특정 행의 분석을 위해 결과 집합을 나누고 정렬할 수 있습니다.
- 집계 윈도우 함수: SUM(), AVG(), COUNT(), MIN(), MAX() 등
- 순위 윈도우 함수: RANK(), DENSE_RANK(), ROW_NUMBER()
- 행 순서 윈도우 함수: FIRST_VALUE(), LAST_VALUE(), LAG(), LEAD(), NTH_VALUE()
-- 집계 윈도우 함수 예 SELECT 고객번호, AVG(마일리지) OVER(PARTITION BY 도시) AS 도시평균마일리지 FROM 고객; -- 순위 윈도우 함수 예 SELECT 고객번호, 마일리지, RANK() OVER(ORDER BY 마일리지 DESC) AS 순위 FROM 고객; -- 행 순서 윈도우 함수 예 SELECT 고객번호, 마일리지, FIRST_VALUE(마일리지) OVER(ORDER BY 마일리지) AS 최소마일리지 FROM 고객; |
데이터 모링
- 정의: 현실 세계의 엔티티(개체), 속성, 관계를 분석하고 이를 데이터 모델로 변환하는 과정입니다.
- 목적: 데이터 모델링 과정에서는 비즈니스 요구사항을 이해하고 데이터 요구사항을 수집하며, 데이터의 구조와 관계를 정의하고 문서화합니다.
- 방법론: 데이터 모델링은 체계적인 방법론을 사용하여 데이터 모델의 설계, 개발, 유지보수를 진행하며, 이 과정은 데이터베이스 설계와 밀접한 관련이 있습니다. 데이터베이스 시스템의 성능, 효율성, 유지보수 용이성에 중요한 영향을 미칩니다.
데이터 모델링 프로세스
- 요구사항 분석
- 비즈니스 요구사항과 데이터 요구사항을 분석하여 데이터 모델의 기본 틀을 정의합니다.
- 개념적 데이터 모델링
- 개념적 모델을 작성하여 고수준에서 **엔티티(개체)**와 그들 간의 관계를 정의합니다. 이 단계에서는 주로 ER 다이어그램이 사용됩니다.
- 논리적 데이터 모델링
- 개념적 모델을 기반으로 논리적 모델을 작성하여 데이터 구조와 데이터 간의 관계를 더욱 세부적으로 정의합니다. 여기서는 테이블, 열(Column), 행(Row), 키(Key) 등이 구체화됩니다.
- 물리적 데이터 모델링
- 논리적 모델을 실제 **데이터베이스 관리 시스템(DBMS)**에 맞게 최적화하고, 인덱스, 파티셔닝, 스토리지 옵션 등을 고려하여 물리적 모델로 변환합니다.
- 구현 및 유지보수
- 물리적 데이터 모델을 DBMS에 구현하고, 실질적인 데이터베이스를 구축합니다. 이후 데이터베이스의 성능을 모니터링하고, 필요에 따라 유지보수를 진행합니다.
- 검증 및 최적화
- 구현된 데이터베이스가 요구사항을 충족하는지 검증하고, 성능 및 효율성을 최적화합니다. 인덱스 최적화나 쿼리 성능 개선 등의 작업이 이 단계에서 수행됩니다.
- 문서화
- 데이터 모델링 과정과 결과물을 문서화하여, 추후 유지보수 및 업데이트를 위해 참고 자료로 사용합니다. 문서화는 또한 지식 공유 및 협업을 위한 중요한 도구가 됩니다.
요구사항 분석
- 정의: 데이터 모델링의 시작 단계로, 시스템 또는 응용프로그램에서 필요한 사용자 및 시스템의 요구사항을 정의하고 문서화하는 과정입니다.
- 주요 산출물:
- 요구사항 분석서: 시스템 요구사항을 상세히 기술한 문서
- 인터뷰 기록 문서: 사용자 또는 이해관계자와의 인터뷰 내용을 기록한 문서
개념적 데이터 모델링(Conceptual Data Modeling)
- 정의: 요구사항 분석 결과를 바탕으로 개념적 데이터 모델을 구축하는 단계입니다. 이 단계에서는 특정 DBMS와 독립적인 개념적 스키마를 기술하며, 업무 중심적이고 포괄적인 수준의 모델링을 수행합니다.
- 중점 사항:
- 엔티티와 관계 위주의 모델링을 통해 전반적인 골격을 파악
- 주요 엔티티, 주요 속성, 식별자와의 관계 도출
- 개념적 스키마로 표현된 결과를 ERD(Entity-Relationship Diagram) 등으로 시각화
- 속성 도출:
- 속성(Attribute): 엔티티 집합에 포함되는 최소의 데이터 단위
- 각 엔티티는 각 속성에 대해 단일 속성값을 가짐
- 식별자 도출:
- 식별자(Identifier): 각 엔티티를 구분할 수 있는 속성 또는 속성의 집합
- 엔티티 집합은 반드시 식별자를 가짐
관계 도출:
- 관계(Relationship): 엔티티 간의 관련성을 의미하며, 존재 관계와 행위 관계로 구분
- 존재 관계(Existence Relationship): 두 엔티티 간의 소속이나 소유 관계
- 예: 사원과 가족, 학과와 학생, 은행과 계좌
- 행위 관계(Behavioral Relationship): 두 엔티티 간의 상호작용이나 동작의 관계
- 예: 교수와 학생, 고객과 주문
- 존재 관계(Existence Relationship): 두 엔티티 간의 소속이나 소유 관계
- 관계의 카디널리티(Cardinality, Degree): 두 테이블 간의 관계에서 대응수를 의미하며, 한 테이블의 행이 다른 테이블에서 여러 행과 연결될 수 있는지를 나타냄
- 종류: 일대일(1:1), 일대다(1), 다대일(N:1), 다대다(N)
- 관계 이름(Membership): 객체 간의 관계가 맺어지는 형태
- 관계 시작점(The Beginning): 관계가 시작되는 엔티티
- 관계 끝점(The End): 관계가 끝나는 엔티티
- 관계 선택 사양(Optionality):
- 선택적(Optional) 참여 관계: 두 엔티티 간의 관계가 선택적으로 존재 가능
- 필수적(Mandatory) 참여 관계: 두 엔티티 간에 관계가 반드시 존재해야 함
ERD 표기법 기호 및 IE 방식 표기법 기호
- ERD 표기법 기호:
- 엔티티: 직사각형
- 관계: 마름모
- 속성: 타원형
- 식별자: 타원형에 밑줄
- IE 방식 표기법 기호:
- 엔티티: 직사각형
- 관계: 선으로 연결된 다이아몬드
- 카디널리티:
- 1:1 관계: | |
- 1관계: | <
- N관계: < <
논리적 데이터 모델링(Logical Data Modeling)
- 정의: 개념적 데이터 모델을 더욱 상세하게 정의하고, 개발에 사용하는 특정 DBMS에 적합한 모델로 변환하는 단계입니다.
- 변환 규칙:
- 모든 엔티티는 릴레이션으로 변환
- **일대일 관계(1:1)**와 **일대다 관계(1)**는 외래키로 표현
- **다대다 관계(N)**는 릴레이션으로 변환
식별 관계와 비식별 관계
- 식별 관계:
- 부모 릴레이션의 기본키가 자식 릴레이션의 기본키의 일부로 사용되는 관계
- 두 릴레이션 간의 속성이 서로 필수적일 때 적합
- 비식별 관계:
- 부모 릴레이션의 기본키가 자식 릴레이션의 기본키에 포함되지 않는 관계
- 두 릴레이션 간의 관계가 필수적이지 않을 때 적합
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 29일차_게시판 만들기1 (0) | 2024.08.13 |
---|---|
#파이썬 28일차_MYSQL5 (0) | 2024.08.12 |
#파이썬 27일차_MYSQL4 (0) | 2024.08.08 |
#파이썬 27일차_MYSQL3 (0) | 2024.08.07 |
#파이썬 26일차_MYSQL2 (0) | 2024.08.06 |