A. 데이터 모델링

현실세계의 모습들을 추상화해서 저장하는 과정

 

데이터 모델링이란 정보 시스템 구축을 위해 데이터 관점의 업무를 분석하는 과정, 현실세계의 데이터를 약속된 표기법에 의해 표현하는 과정, 데이터 베이스를 구축하기 위한 분석 및 설계의 과정을 아루는 말이다. 데이터 모델링의 목적은 크게 두가지로 정리할 수 있다.

① 업무에 필요한 정보를 정확하게 정의하고 표현하여 업무를 분석한다.

② 분석 모델을 통해 실제 데이터 베이스를 생성하여 데이터를 관리한다.


데이터 모델링은 3단계로 이루어진다.

 

현실세계를 조직이나 사용자가 필요로 하는 데이터의 요구사항을 찾고 분석하는 과정의 개념적 모델링(Conceptual Data Modeling),

정보의 논리적인 구조와 규칙을 명확하게 표현하는 기법/과정의 논리적 모델링(Logical Data Modeling),

모델을 어떻게 하드웨어에 표현할 것인지 다루는 과정의 물리적 모델링(Physical Data Modeling)

으로 나뉜다.

개념적 데이터 모델링은 추상화 수준이 가장 높고 업무 중심적인 모델링이다. 전사적 관점에서 기업의 데이터 모델링이다.

논리적 데이터 모델링은 비즈니스 데이터에 존재하는 사실을 인식하여 기록하는 모델링이다. 정규화를 수행하여 데이터 모델의 독립성 확보하는 단계이다.

물리적 모델링은 구축할 데이터베이스 관리 시스템에 테이블, 인덱스 등을 생성하는 단계로, 성능, 보안, 가용성을 고려하여 구축한다.

 


B. 3층 스키마(3 -Level Schema)

사용자, 설계자, 개발자가 데이터베이스를 보는 관점에 따라 데이터베이스를 기술하고 이들 간의 관계를 정의한 표준
View(뷰) : 3단계 계층으로 분리하여 독립성을 확보한 각 계층
Schema(스키마): 계획이나 도식을 가리키는 영어 낱말로, 자료를 저장하는 구조와 표현법을 정의하는 것을 뜻함

 

외부 스키마란 여러 개의 사용자 관점으로 구성된다. 즉, 개별 사용자(= 사용자 관점)가 보는 DB 스키마이다.

개념 스키마란 데이터 베이스의 물리적인 저장 구조에 대한 부분은 숨기고 데이터의 전체적인 구조와 관계에 대해 집중한다. 모든 응용시스템이나 사용자(=설계자 관점, 통합 관점)가 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한다.

내부 스키마란 DB가 물리적으로 저장된 형식을 말한다. 물리적 장치에서 데이터가 실제적으로 저장되는 완전히 구체적인 방법을 표현하는 스키마이다. 개발자 관점에서 바라보는 스키마이며, 물리적 저장 구조와 관련이 깊다.

 

간단히 정리하자면, 3층 스키마란 데이터베이스를 3가지의 큰 범주로 분리하자는 개념이다. 사상(Mapping)은 각 범주간의 요청/응답을 전송하는 것이다. 외부 스키마에서 요청이 들어오면 DBMS에 의해 개념 스키마-내부 스키마로 전달되는데 여기에서 요청과 응답을 변환하는 프로세스를 사상(Mapping)이라 한다.

개념 스키마는 전체 데이터 베이스의 설계를 설명할 수 있는 모델로 데이터 구조의 구현 정보와 같은 내부 상세 정보는 보지 못하지만 구조, 관계 등은 볼 수 있다.

내부 스키마는 물리적 저장 구조를 갖춘 모델을 의미한다.


데이터 독립성이란 상위 스키마를 변경하지 않고 하나의 계층에서 스키마를 변경할 수 있는 능력을 의미한다. 데이터 베이스의 여러 레벨에서 구조를 수정할 때, 하위 레벨 스키마를 변경하더라도 상위 레벨 스키마를 건드릴 필요가 없는, 영향을 미치지 않는 것을 의미한다.

논리적 독립성은 사용자 특성에 맞게 변경이 가능하며, 개념 스키마가 변경되어도 외부 스키마에는 영향을 미치지 않도록 지원한다. 논리적 구조가 변경되어도 응용프로그램에 영향이 없다.

물리적 독립성은 물리적 구조의 영향 없이 개념 변경이 가능하다. 내부 스키마가 변경되어도 개념 스키마는 영향을 받지 않도록 지원하며, 저장장치의 구조 변경은 응용프로그램과 개념 스키마에 영향을 주지 않는다.


정리하자면, 데이터가 저장되는 파일의 구조를 바꿨다고 해서(내부 스키마). 전체적인 데이터 베이스 구조/설계가 달라지거나(개념 스키마) 응용 프로그램단(외부 스키마)이 변경되면 안된다. 또한, 데이터베이스를 바라볼 수 있는 관점을 3가지로 나눌 수 있는데, 그 각각은 논리적/물리적으로 독립적이면 좋다.

 


C. 식별자

하나의 엔터티에 구성되어 있는 여러 개의 속성 중에서 엔터티를 대표할 수 있는 속성
하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야함

 

식별자는 자신의 엔터티 내에서 대표성을 갖는지, 스스로 생성되었는지에 따라 혹은 속성의 개수를 기준으로 분류할 수 있다. 주식별자는 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자이며 다른 엔터티와 참조 관계를 연결할 수 있다. 보조 식별자는 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자 이거나 대표성을 갖지 못해 참조 관계 연결을 하지 못한다. 스스로 엔터티 내에서 정의되는 식별자를 내부 식별자, 다른 엔터티와의 관계를 통해 다른 엔터티로부터 받아오는 식별자를 외부 식별자라 한다. 속성의 수로 분류되는 식별자는 단일 식별자와 복합 식별자라 한다. 마지막으로, 본질 식별자는 업무에 의해 만들어지는 식별자를 뜻하고, 인조 식별자는 업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 갖고 있기 때문에 인위적으로 만든 식별자이다.


ERD를 통해 살펴보면 아래 그림과 같다. 하나의 엔터티에서 여러 식별자로 구분될 수 있음을 알 수 있다.

 

자식 엔터티의 주식별자로 부모 주식별자가 상속되는 경우를 식별자 관계(Identifying Relationship)이라 한다. 각 엔터티에 주식별자가 지정되고, 엔터티간 관계를 연결하면 부모와 자식 간의 관계가 생성된다.

분류 식별자 관계 비식별자 관계
목적 강한 연결관계의 표현 약한 연결관계의 표현
자식 주식별자 영향 자식 엔터티의 주식별자의 구성에 포함 자식 엔터티의 일반 속성에 포함
표기법 실선(IE), 버티컬바(Barker) 점선(IE)
연결 시 고려사항 1. 반드시 부모 엔터티에 종속되어야 함
2. 자식 주식별자 구성에 부모 엔터티의 주식별자 속성이 필요한 경우에 사용함
3. 상속 받은 주식별자 속성을 타 엔터티에 이전할 필요가 있음
1. 약한 종속 관계를 가짐
2. 자식 주식별자 구성을 독립적으로 구성할 경우에 사용함
3. 자식 주식별자 구성에 부모 주식별자 부분이 필요함
4. 상속 받은 주식별자 속성을 다른 엔터티에 차단할 필요가 있음
5. 부모 쪽의 관계 참여가 선택 관계임

주의: 자식 엔터티의 주식별자로 부모 주식별자가 상속되는 경우 식별자 관계는 비식별자 관계이다.


부모 엔터티 = 사원, 자식 엔터티 = 교육이력 → 사원의 사번을 가지고 교육이력을 만들어야 하기 때문이다.

부모 엔터티 = 부서, 자식 엔터티 = 사원 → 부서의 부서번호가 사원의 주식별자가 아닌 일반 속성으로 사용되었기 때문에 비식별자 관계이며 부모는 부서, 자식은 사원 엔터티이다. 사원 엔터티를 구성할 때에 부서번호가 필요하며, 사번이라는 주식별자 구성을 독립적으로 구성한다.

부모 엔터티 = 사원, 자식엔터티 = 구매신청 → 사원의 사번을 구매신청의 주식별자가 아닌 일반 속성으로 이용하였다.

 

D. 정규화

데이터의 일관성을 유지하고 데이터의 중복을 방지하며 데이터의 유연성을 유지하기 위해 데이터를 분해하는 과정

 

우선 용어를 우선 정리할 필요가 있다.

용어 설명
정규화(Normalization) DBMS 테이블의 삽입, 삭제, 수정 과정에서의 이상(Anomaly) 현상의 발생을 최소화하기 위해 작은 단위의 테이블로 나눠가는 과정임
정규형(NF; Normal Form) 정규화된 결과물에 의해 도출된 데이터 모델이 갖춰야 할 특성을 만족하는 '정규화된 결과물'을 의미함
함수적 종속성(FD; Functional Dependency) 테이블의 특정한 컬럼 값(A)을 알고 있으면 다른 컬럼 값(B)을 알 수 있다고 가정할 때, 칼럼 B는 칼럼 A에 함수 종속성을 갖는다고 표현함
결정자(Determinant) 함수적 종속성에서 특정한 값을 의미함
다치 종속(MVD; MultiValued Dependency) 결정자 칼럼 A에 의해 칼럼 B의 값을 다수 알 수 있을 때, 칼럼 B는 칼럼 Z에 다치종속 되었다고 표현함

 

기본 테이블이 아래와 같으며 중복된 이름, 대학이 없다고 가정한다. 또한 1대학 당 1개의 소재지(시/도)를 갖는다.

 

제1정규화는 한 속성에 여러 개의 속성이 포함되어 있거나 같은 유형의 속성이 여러 개로 나눠져 있는 경우 해당 속성을 분리하는 것을 의미한다.

즉, 위의 테이블을 아래와 같은 테이블을 만드는 과정이다. 

제1정규형을 만족함

 

제2정규화는 제1정규화를 만족시키고 PK가 아닌 모든 칼럼이 PK 전체에 종속하는 것을 의미한다. PK에 종속되지 않거나 PK 중에서 일부의 컬럼만 종속되는 칼럼이 있다면 이를 분리시켜야 한다.

 

제2정규형을 만족함

 

제3정규화는 제2정규화를 만족시키고 일반 속성 간에도 함수 종속 관계가 존재하지 않아야 한다. 이는 한 테이블에서 A → B, BC  가 성립할 때 A →C 가 성립되는 것이 없어야 한다는 의미이다. 

제3정규형을 만족함

PK에 해당하는 이름을 제외하면 다른 속성 간에는 종속관계가 발생하면 안된다. 그러나 대학명과 소재지(시/도)의 관계를 살펴보면 종속관계임을 알 수 있다. 이에 제3정규화를 위반한 경우라 볼 수 있고, 이를 해결하기 위하여 대학 정보만을 담고 있는 테이블을 따로 구성하여야 한다.


정규화 유형은 이보다 다양한 유형이 존재하지만 SQLD 시험에 주로 출제되는 제1정규화, 제2정규화, 제3정규화까지만 공부하기로 한다.

정리하자면,

제1정규화의 경우 모든 속성이 반드시 하나의 값을 가져야 하고, 한 속성에 여러 속성값을 부여하거나 같은 유형의 속성이 여러 개인 경우 해당 속성을 분리한다.(원자성 확보)

제2정규화는 주식별자에 완전하게 함수 종속되지 않은 속성을 분리하여 종속 관계를 구성한다.(부분적 함수 종속 제거)

제3정규화는 일반 속성간의 함수 종속성이 발생하지 않도록 분리한다.(이행적 함수 종속 제거)

 

SQLD 1과목 내용 중 많이 틀리는 개념들을 정리하였다.

+ Recent posts