논리적 데이터 모델링
논리적 데이터 모델링의 개념
앞선 포스팅에서는 개념적 데이터 모델링의 개념에 대해 살펴봤고, 개념적 모델링의 결과로 ER 모델과 같은 개념적 모델을 결과물로 만드는 것을 알 수 있었다.
논리적 데이터 모델링은 이렇게 만들어진 개념적 모델을 토대로 데이터베이스의 구조에 맞는 논리적 데이터 모델을 설계하고 만드는 단계
이다. 세부적으로는 데이터베이스의 구조에 맞춰 테이블, 컬럼, 기본 키, 외래 키 등의 구조를 정의하며, 중복을 제거하고 무결성을 보장하는 구조를 설계한다.
데이터 모델은 관계형 모델, 객체지향형 모델, 객체-관계형 모델, Key/Value 모델, Document 모델 등이 있으며, 일반적으로는 관계형 모델(relational model)을 사용
한다.
논리적 데이터 모델링의 최종적인 결과물
은 DBMS 의 데이터 정의 언어(DDL) 로 기술된 논리 스키마
이며, 이러한 결과물(=논리적 데이터 모델)은 특정 플랫폼에 종속되지 않으며, DBMS의 종류에 대해서도 독립적이다. 결과물인 논리 스키마는 아직 완성된 DDL문이 아니며, 다음 단계인 물리적 데이터 모델링 단계를 거쳐 완전해진다.
논리적 데이터 모델링의 필요성
개념적 데이터 모델을 관계형 DBMS 가 수용 가능한 구조로 변환해야 함.
개념적 데이터 모델링과 논리적 데이터 모델링
개념적 데이터 모델링 : 현실 세계의 업무를 추상화하는 과정
논리적 데이터 모델링 : 추상화한 결과를 데이터베이스의 논리적 구조로 변환하는 과정
관계형 모델
관계형 모델의 개념
관계형 모델은 데이터를 행(row, record)과 열(column, field)로 이루어진 테이블(table) 형태로 표현하는 데이터 모델
을 의미한다. 1970년 에드가 F. 커드에 의해 처음 제안되었고, 현재 논리적 데이터 모델링에서 가장 많이 사용
되고 있는 방식이다.
관계형 모델은 릴레이션
이라는 수학적 관계에 기반을 둔다는 특징이 있으며, 데이터의 표현이 단순하면서도 직관적이라는 장점이 있다.
관계형 모델의 구성 요소
구성 요소 | 영문 명칭 | 설명 |
---|---|---|
릴레이션 | relation | 데이터가 저장되는 테이블의 논리적 구조. 행과 열로 구성된 데이터 집합을 지칭한다. |
컬럼(필드) | column(field) | 릴레이션의 열을 지칭하는 것으로, 각 데이터 항목의 속성값을 가진다. 컬럼은 특정 도메인을 가지며, 동일 컬럼은 모든 레코드(행)에 대해 동일한 도메인이 적용된다. 컬럼의 이름과 그에 해당하는 값들의 집합을 컬럼이라고 한다. |
레코드(투플) | record(tuple) | 릴레이션의 행을 지칭하는 것으로, 하나의 데이터 항목을 나타낸다. 릴레이션에서 각 레코드는 고유하다. |
도메인(속성) | domain | 하나의 속성이 가질 수 있는 값들의 집합 혹은 범위. 예를 들어 학번은 정수값만을 가질수 있다 라는 규칙에서는 정수 범위가 도메인이 된다. |
차수 | degree | 릴레이션의 속성(컬럼) 개수를 지칭한다. 컬럼이 4개라면 릴레이션의 차수는 4이다. |
카디널리티 | cardinality | 릴레이션의 레코드 개수를 지칭한다. 10개의 레코드가 있다면 릴레이션의 카디널리티는 10. |
키 | key | 릴레이션에서 각 레코드를 고유하게 식별하기 위한 속성(컬럼)이나 속성의 집합. 기본키(primary key), 외래키, 수퍼키, 후보키 등. |
제약조건 | constraints | 릴레이션의 데이터 무결성을 유지하기 위한 규칙 도메인 제약, 기본 키 제약, 고유성 제약 등. |
릴레이션 스키마 | schema | 릴레이션의 구조를 정의한 틀 릴레이션의 이름, 컬럼(속성), 컬럼의 도메인 등을 포함한다. |
인스턴스 | instance | 릴레이션에 특정 시점에 저장되어 있는 실제 데이터 집합을 지칭. 릴레이션이 데이터베이스의 스키마(구조)라면 인스턴스는 실제 데이터 내용 |
레코드의 특성
특성 | 설명 |
---|---|
레코드의 유일성 | 하나의 릴레이션에는 중복되는 레코드가 존재할 수 없다. |
레코드의 무순서성 | 릴레이션에 포함된 레코드 간에는 순서가 정해져있지 않다. 순서를 섞어도 동일한 의미를 가진 릴레이션이다. |
컬럼의 특성
특성 | 설명 |
---|---|
컬럼의 무순서성 | 릴레이션에 포함된 컬럼 간에는 순서가 정해져있지 않다. 순서를 섞어도 동일한 의미를 가진 릴레이션이다. |
컬럼의 원자성 | 컬럼은 여러 의미를 갖는 값으로 분해가 불가능한 원자적인 특성을 가진다. |
키의 특성과 종류
릴레이션에서 각 레코드를 고유하게 식별하기 위한 컬럼(속성)이나 컬럼(속성)들의 집합(결합)을 지칭한다.
(1) 키의 특성
키의 특성 | 영문 명칭 | 설명 |
---|---|---|
유일성 | uniqueness | 키 컬럼은 각각의 레코드를 식별하기 위해 각각의 레코드 마다 다른 값을 가져야 한다. 즉, 특정 레코드의 키 컬럼의 값은 해당 컬럼의 모든 값 중에서 유일해야 한다. |
최소성 | irreducibility | 키 컬럼은 유일성을 유지하기 위한 최소 개수의 컬럼으로 이뤄져야 한다. 키가 2개 이상의 컬럼으로 이루어질 경우, 이중 어느 한 컬럼을 제거하면 유일성이 파괴되도록 최소성을 유지해야 한다. |
(2) 키의 종류
키의 종류 | 영문 명칭 | 설명 |
---|---|---|
수퍼키 | super key | 한 릴레이션에서 레코드를 고유하게 구별할 수 있는 컬럼 집합들. 유일성을 만족하는 키를 지칭한다. |
후보키 | candidate key | 수퍼키 중 최소한의 컬럼으로 구성된 수퍼키들. 기본키가 될 수 있는 후보키다. 유일성과 최소성을 만족하는 키를 지칭한다. |
기본키 | primary key | 레코드를 고유하게 구분하기 위한 키로 지정한 후보키. 한 릴레이션마다 하나의 기본키가 지정된다. 후보키 중 하나이므로 유일성과 최소성을 만족한다. |
외래키 | foreign key | 참조된 다른 릴레이션의 기본키 |
(3) 예시로 키 이해하기
구분 | 키 컬럼 |
---|---|
수퍼키 | 상품번호, (상품명+제조사), 바코드, (상품명+바코드), (상품명+유통기한) 등 |
후보키 | 상품번호, 바코드 |
기본키 | 상품번호 |
관계형 모델의 제약조건
제약 조건 | 영문 명칭 | 설명 |
---|---|---|
영역 제약조건 | domain constraints | 특정 컬럼이 가질 수 있는 값에 대한 제약 조건 즉 컬럼의 값은 도메인(가능한 값의 범위)에 포함되어야 한다는 제약조건이다. (1) 데이터 타입 : 속성이 가질 수 있는 데이터의 유형(VARCHAR, INT, BOOLEAN ..) (2) 값의 범위 : 속성이 가질 수 있는 값의 상한 및 하한을 정의(0 ~ 120 사이.. 등) (3) 값의 형식 : 특정 형식(패턴)으로 데이터가 이뤄져야 함(전화번호는 010-XXXX-XXXX 패턴) (4) NULL 허용 여부 : 값이 비어있는 것을 허용 할지 여부 |
키 제약조건 | key constraints | 릴레이션의 각 레코드를 고유하게 식별하기 위한 적어도 하나의 키가 있어야 한다. 데이터의 무결성과 일관성 유지, 그리고 데이터의 중복 문제 방지 목적이다. |
개체 무결성 제약조건 | entity integrity constraints | 기본키 값은 NULL이 될 수 없다는 제약조건. 기본키 값으로 NULL을 허용할 경우 각 레코드를 구별할 수 없어진다. |
참조 무결성 제약조건 | referential integrity constraints | 릴레이션 간의 관계에서 사용되는 외래키는 반드시 존재하는 기본 키 또는 고유 키여야 한다. |
논리적 데이터 모델링의 단계
관계형 모델로의 변환 (ERD -> 관계형 모델)
순번 | 단계 | 설명 |
---|---|---|
1 | 개체 집합 | 하나의 개체 집합은 하나의 릴레이션으로 변환한다. 이 때 개체 집합의 키 속성 중 하나를 릴레이션의 기본키로 지정한다. |
2 | 약한 개체 집합 | 강한 개체 집합의 키 속성이 약한 개체 집합의 릴레이션에 포함한다. 약한 개체 집합의 기본키는 강한 개체 집합의 키와 약한 개체 집합의 부분 키를 결합해 저장한다. |
3 | 일대일 관계 | 두 릴레이션 중에서 한 릴레이션의 기본키를 다른 릴레이션의 외래키로 참조한다. |
4 | 일대다/다대일 관계 | 일 쪽의 기본키를 다 쪽의 릴레이션에서 외래키로 참조한다. |
5 | 다대다 관계 | 두 릴레이션의 관계를 나타내는 릴레이션을 별도로 생성한다. 생성한 관계 릴레이션에는 관계에 참여하는 두 릴레이션의 기본키를 각각 참조하는 외래키로 복합키 형태의 컬럼을 구성한다. |
6 | 다중값 속성 | 신규 릴레이션을 구축하는데, 기존 릴레이션의 기본키와 다중값 속성을 담는다. 신규 릴레이션의 기본키는 기존 릴레이션의 기본키와 다중값 속성의 결합으로 한다. |
7 | 관계 집합의 속성 | 각각의 속성을 외래키가 위치한 릴레이션의 컬럼으로 삽입한다. |
8 | n항 관계 | n 개 이상의 개체 집합이 참여한 관계를 나타내는 릴레이션을 신규로 생성한다. 이 릴레이션은 참여하는 모든 개체 집합의 기본키를 외래키로 포함하고, 이를 복합키로 구성한다. |