ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL 전문가 가이드] 1과목 - 제 3장. 속성(Attribute) 정리 ( + 정규화(Normalization))
    데이터베이스(DataBase)/SQL 전문가 가이드 (2020 개정판) 2023. 4. 13. 11:18
    728x90
    * 정규화(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

    댓글

Designed by Tistory.