-
[SQL 전문가 가이드] 1과목 - 제 3장. 속성(Attribute) 정리 ( + 정규화(Normalization))데이터베이스(DataBase)/SQL 전문가 가이드 (2020 개정판) 2023. 4. 13. 11:18728x90
* 정규화(Normalization) 정리를 보고 싶은 분은 [ Ctrl + F ] 를 통해 "3. 속성의 특징"으로 이동 바란다! 1. 속성의 개념
속성(Attribute)이란 사전적인 의미로는 사물(事物)의 성질, 특징 또는 본질적인 성질, 그것이 없다면 실체를 생각할 수 없는 것으로 정의할 수 있다.
이를 데이터 모델링(Data Modeling)에 적용할 경우, "엔터티(Entity)가 가지고 있는 특성이나 성질"이라 볼 수 있다.
"업무에서 필요로 하는 인스턴스(instance)로 관리하고자 하는 더 이상 분리되지 않는 최소 데이터 단위"
* 속성(Attribute)의 정의 - 업무에서 필요로 한다.
- 의미상 더 이상 분리되지 않는다.
- 엔터티를 설명하고 인스턴스의 구성 요소가 된다.
2. 엔터티(Entity), 인스턴스(Instance)와 속성(Attribute), 속성값(Attribute Value)에 대한 내용과 표기법
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)과 같은 의미로 사용되며, 데이터의 집합을 의미
1NF (1차 정규형) 한 학생당 여러개의 과목을 수강할 수 있다. 위처럼 '김철수' 학생은 복수의 과목을 수강하나, 속성값은 원자값(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에 함수적 종속이라고 표현한다. 2NF (2차 정규형) 즉, 완전 함수 종속은 '기본키에만 종속'되어야 한다.
(기본키가 여러 속성으로 구성된 경우, 기본키를 구성하는 속성 중 일부만 종속 - 부분 함수 종속)
결과적으로 '기본키'가 될 수 있는 학번 / 수강 과목을 기준으로 나누어 릴레이션을 분리시켜야 한다.
3. 제 3 정규형(3NF)
제 2 정규형을 만족하면서, *이행적 함수 종속성을 제거한 정규형이다.
즉, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제 3 정규형을 만족한다고 한다.
* 이행적 함수 종속 A -> B, B -> C 인 경우, A -> C가 성립되는 경우,
즉, A를 알면 B를 알고 이를 통해 C를 알 수 있는 경우를 뜻한다.3NF (3차 정규형) 학번으(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 (속성) ]
728x90'데이터베이스(DataBase) > SQL 전문가 가이드 (2020 개정판)' 카테고리의 다른 글
[SQL 전문가 가이드] 1과목 - 제 5장. 식별자(Identifiers) 정리 (0) 2023.05.11 [SQL 전문가 가이드] 1과목 - 제 4장. 관계(Relationship) 정리 ( + RDBMS, Relation과 Relation의 차이) (2) 2023.05.10 [SQL 전문가 가이드] 1과목 - 제 2장. 엔터티(Entity) 정리 (0) 2023.04.12 [SQL 전문가 가이드] 제 0장. 인터넷 PDF 자료 (0) 2023.04.04 [SQL 전문가 가이드] 1과목 - 제 1장. 데이터 모델링(Data Modeling 의 이해 정리 (1) 2023.04.04