[SQL 전문가 가이드] 1과목 - 제 3장. 속성(Attribute) 정리 ( + 정규화(Normalization))
* 정규화(Normalization) 정리를 보고 싶은 분은 [ Ctrl + F ] 를 통해 "3. 속성의 특징"으로 이동 바란다! |
1. 속성의 개념
속성(Attribute)이란 사전적인 의미로는 사물(事物)의 성질, 특징 또는 본질적인 성질, 그것이 없다면 실체를 생각할 수 없는 것으로 정의할 수 있다.
이를 데이터 모델링(Data Modeling)에 적용할 경우, "엔터티(Entity)가 가지고 있는 특성이나 성질"이라 볼 수 있다.
"업무에서 필요로 하는 인스턴스(instance)로 관리하고자 하는 더 이상 분리되지 않는 최소 데이터 단위"
* 속성(Attribute)의 정의 |
- 업무에서 필요로 한다. - 의미상 더 이상 분리되지 않는다. - 엔터티를 설명하고 인스턴스의 구성 요소가 된다. |
2. 엔터티(Entity), 인스턴스(Instance)와 속성(Attribute), 속성값(Attribute Value)에 대한 내용과 표기법
* 엔터티, 인스턴스, 속성, 속성값의 관계(relation) |
- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다. - 한 개의 엔터티는 두 개 이상의 속성을 갖는다. - 한 개의 속성은 한 개의 속성 값을 갖는다. |
정리하자면, Entity는 2개 이상의 instance, instance는 2개 이상의 속성을 소유하고 있는 관계로 이해할 수 있다.
3. 속성의 특징
다음과 같은 특징을 가지고 있으며, 만약 도출된 속성이 다음의 성질을 만족하지 않는다면 적절하지 않은 속성일 수 있다.
- 해당 업무에서 필요로 하고 관리하고자 하는 정보여야 한다. (Entity의 특징) - 정규화(Normalization) 이론에 근간하여 정해진 주식별자(Primary Identifer)에 함수적 종속성(Functional Dependency)을 가져야 한다. - 하나의 속성에는 하나의 속성값(Attribute Value)만 가진다. (정규화 1NF) |
* 정규화(Normalization)란?
: 데이터베이스의 *이상현상(Anomaly)를 없애고자, 관계형 데이터베이스(Relational DataBase)의 설계에서
중복을 최소화하고 데이터를 구조화하는 프로세스를 뜻한다.
*이상현상(Anomaly) |
- 갱신 이상(Modification Anomaly) : 데이터를 갱신하는 경우, 데이터의 불일치가 발생. - 삽입 이상(Insertion Anomaly) : 불필요한 데이터일지라도, 데이터 저장을 위해 함께 삽입되는 현상. - 삭제 이상(Deletion Anomaly) : 삭제시, 필요한 정보도 함께 제거되는 현상. |
정규화된 결과를 정규형이라 하며, 정규형은 기본/고급 정규형으로 나눌 수 있다.
기본 정규형 | 제 1정규형(1NF), 제 2정규형(2NF), 제 3정규형(3NF), BCNF(Boyce and Codd Normal Form) |
고급 정규형 | 제 4정규형(4NF), 제 5정규형(5NF) |
이때, 자주 사용되는 정규형은 '기본 정규형'으로 관련 내용에 대해 설명하고자 한다.
1. 제 1 정규형(1NF)
* 릴레이션(relation)에 속하는 속성값이 모두 원자값(Atomic Value)여야 한다.
* relation : 테이블(Table)과 같은 의미로 사용되며, 데이터의 집합을 의미

한 학생당 여러개의 과목을 수강할 수 있다. 위처럼 '김철수' 학생은 복수의 과목을 수강하나, 속성값은 원자값(Atomic) 형태로 표현하여야 한다. 이를 위해 위의 방식처럼 속성값을 분리해주어야 한다.
( + Tip. 하단의 1정규형 같은 경우, '삽입이상'을 일으킬 수 있으므로 주의한다. )
제 1 정규형에서 발생할 수 있는 이상현상(Anomaly) |
- 갱신 이상(Modification Anomaly) : 학생 100번의 지도교수인 A를 D로 변경하려면, 학생 400번의 정보도 변경해야 함. - 삽입 이상(Insertion Anomaly) : 수강 과목이 없는 신입생의 경우, null값으로 데이터를 삽입해야 함. (또는 삽입 불가) - 삭제 이상(Deletion Anomaly) : 100번 학생이 '전자'과목을 제거하는 경우, 수강과목 전체가 사라질 수 있음. |
* 기본키(Primary Key)가 아닌 속성들이 기본키에 완전 함수 종속이 되지 못하였기에 해당 문제가 발생.
2. 제 2 정규형(2NF)
제 1 정규형을 지키면서,
기본키(Primary Key)가 아닌 모든 속성이 기본키에 완전 함수 종속(Full Functional Dependecy)인 정규형. \
* 함수적 종속 |
릴레이션(R)이 있을 때, X와 Y를 각각 속성(Attribute)의 부분집합이라고 하면, X의 값을 아는 경우 Y의 값을 식별할 수 있고, X의 값에 따라 Y의 값이 달라지는 경우 Y는 X에 함수적 종속이라고 표현한다. |

즉, 완전 함수 종속은 '기본키에만 종속'되어야 한다.
(기본키가 여러 속성으로 구성된 경우, 기본키를 구성하는 속성 중 일부만 종속 - 부분 함수 종속)
결과적으로 '기본키'가 될 수 있는 학번 / 수강 과목을 기준으로 나누어 릴레이션을 분리시켜야 한다.
3. 제 3 정규형(3NF)
제 2 정규형을 만족하면서, *이행적 함수 종속성을 제거한 정규형이다.
즉, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제 3 정규형을 만족한다고 한다.
* 이행적 함수 종속 |
A -> B, B -> C 인 경우, A -> C가 성립되는 경우, 즉, A를 알면 B를 알고 이를 통해 C를 알 수 있는 경우를 뜻한다. |

학번으(A)로 지도교수(B)를 알 수 있으며, 학번(A)으로 수강과목(C)을 알 수 있다. 지도교수(B)를 통해 수강과목(C)을 알아낼 수 있는 이러한 구조는 3차 정규형을 만족하지 못한다.
즉, 이러한 이행적 함수 종속 관계에 있는 속성을 분리해 정규형을 만족시키도록 구성한다.
4. BCNF(Boyce and Codd Normal Form)
제 3 정규형을 강화하여,
릴레이션의 함수 종속 관계에서 모든 결정자가 *후보키(Candidate Key)인 경우이다.
* 후보키(Condidate Key) |
릴레이션을 구성하는 속성 중, 튜플(Tuple, 테이블의 row 해당)을 유일하게 식별하기 위해 사용하는 속성들의 부분집합. 즉, 기본키로 사용할 수 있는 속성들을 뜻한다. - 하나의 릴레이션 내에서 중복된 튜플이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다. - 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족 시켜야 한다. |
4. 속성의 분류
속성은 ① 속성의 특성에 따른 분류 와 ② 엔터티 구성 방식에 따른 분류 가 있다.
( + ③ 세부 의미를 쪼갤 수 있는지에 따라서도 분류 가능 )
기본 속성
(Basic Attribute)
|
업무로부터 추출한 모든 속성. 가장 일반적이며 속성의 대부분을 차지한다. ( * 코드성 데이터, 엔터티 식별을 위해 부여된 일련번호, 계산하거나 영향을 받아 생성된 속성 외) |
설계 속성
(Designed Attribute)
|
업무상 필요한 데이터 이외에 데이터 모델링을 위해, 업무를 규칙화하기 위해 속성을 새로 만들거나 변형하여 정의하는 속성. * 코드성 속성, 일련번호 등이 해당된다 ... |
파생 속성
( Derived Attribute)
|
다른 속성에 영향을 받아 발생하는 속성. 보통 계산된 값들이 이에 해당된다.
다른 속성에 영향을 받기에 프로세스 설계시 데이터 정합성(Data Consistency) 유지를 위해 유의하여야 한다. |
② 엔터티 구성 방식에 따른 분류
기본키 속성
(PK, Primary Key)
|
엔터티를 식별할 수 있는 속성.
( * PK는 null이 아니고, 중복되어서도 안된다. - NOT NULL, Unique identifier) |
외래키 속성
(FK, Foreign Key)
|
다른 엔터티와의 관계(relation)에서 포함된 속성. 즉, 다른 테이블과의 참조를 표현하여 테이블 서로의 관계를 표현한다. |
일반 속성
|
PK, FK에 포함되지 않은 속성
|
③ 세부 의미 쪼개기의 여부
복합 속성 (Composite Attribute) |
ex> 주소 속성으로 시, 구, 동, 번지 ... 위처럼 여러 세부 속성들로 구성되는 경우를 뜻한다. |
단순 속성 (Simple Attribute) |
ex> 나이, 성별 ... 더 이상 다른 속성들로 구성될 수 없는 (쪼갤 수 없는) 속성들을 뜻한다. |
일반적으로 속성은 하나의 값을 가지나, 그 안에 동일한 성질의 여러 개의 값이 나타나는 경우가 있다.
이 때 속성 하나에 한 개의 값을 가지는 경우를 단일값(Single Value), 그리고 여러 개의 값을 가지는 경우를 다중값(Multi Value) 속성이라 한다.
5. 도메인(Domain)
: 속성이 가질 수 있는 값의 범위. 즉, 속성의 값, 타입, 제약사항 등에 대한 값의 범위를 뜻한다.
Domain 적용에 대한 예시를 확인해보자.
1. 직접 데이터 타입을 지정
CREATE TABLE TEST (
test_id int(2),
user_name varchar(20),
user_tell varchar(13),
address varchar(50)
);
위 SQL문처럼, 테이블 생성시 값의 타입이나 범위 등을 지정하여 필요한 데이터만 수집할 수 있도록 구성한다.
user_tell로, 사용자의 전화번호를 받는다면, 010-ㅁㅁㅁㅁ-ㅇㅇㅇㅇ 형태로 받을지, '-'을 제외할지 등 받고자하는
값을 고려해 지정할 수 있다.
2. 도메인을 이용하여 컬럼 데이터 타입 지정
CREATE DOMAIN RANK CHAR(3) {
DEFAULT '사원'
CONSTRAINT VALID-RANK CHECK (VALUE IN('사원','대리', '과장' ...));
회사의 직급을 [ 사원 / 대리 / 과장 .. ] 표현하는 경우, '선임' , '주임' 등의 다른 표현으로 작성된 데이터는 삽입해서는 안된다. 이를 걸러내기 위해, 값의 범위를 Value in에 지정하여 해당 데이터만을 받아들일 수 있게 지정할 수 있다.
6. 속성의 명명(Naming)
엔터티에서도 언급 되었듯이, 업무에서의 네이밍(명명) 작업은 협업 및 업무 활동과 직결되어 있으므로
용어적 표준과 데이터타입의 일관성 확보를 위해 '용어사전' / '도메인 정의'를 사용하여 진행한다.
[참고 및 이미지 출처 : https://dataonair.or.kr/db-tech-reference/d-guide/sql/?pageid=1&mod=document&kboard_search_option%5Btree_category_1%5D%5Bkey%5D=tree_category_1&kboard_search_option%5Btree_category_1%5D%5Bvalue%5D=%EB%8D%B0%EC%9D%B4%ED%84%B0+%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%9D%98+%EC%9D%B4%ED%95%B4&uid=327 DATA ON-AIR (속성) ]