hyeonga_code

Database_75_정규화 본문

Oracle Database

Database_75_정규화

hyeonga 2023. 8. 27. 05:59
반응형

-- 함수 종속_Functional Dependency    
    -- 속성들 간의 관련성    
    -- "X가 Y를 함수적으로 결정합니다."
        -- Y가 X에 함수적으로 종속되어 있습니다.
        -- X_결정자 -> Y_종속자
        -- 릴레이션 내의 모든 튜플에서 하나의 X값에 대한 Y값이 항상 하나입니다.
        -- X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합입니다.
    -- 종속 관계 판단 시 유의 사항
        -- 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 합니다.
            -- 속성 값은 계속 변할 수 있습니다.
            -- 현재 릴레이션에 포함된 속성 값만으로 판단하면 안됩니다.
        -- 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정합니다.
        -- 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있습니다.
    -- 종류
        -- FFD_Full Functional Dependency : 완전 함수 종속
            -- 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있습니다.
            -- 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않습니다.
            -- 일반적으로 함수 종속을 의미합니다.
        -- PFD_Partial Functional Dependency : 부분 함수 종속
            -- 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속되어 있습니다.
        
        -- 회원 이름은 아이디가 결정합니다. 이벤트번호는 관련이 없습니다.
            -- 회원 이름은 아이디에 부분 종속되는 관계입니다.
            -- 고객 아이디 -> 고객 이름
        -- 당첨의 여부는 아이디와 이벤트 번호와 관련이 있습니다.
            -- 당첨의 여부는 아이디와 이벤트 번호에 완전 함수 종속되는 관계입니다.
            -- 고객 아이디, 이벤트 번호 -> 당첨 여부

-- 이상 현상_Anomaly
    -- 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 대 발생할 수 있는 부작용입니다.
    -- 종류
        --  Insertion_삽입 이상
            -- 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제입니다.
                -- 아직 이벤트에 참여하지 않은 신규 고객의 데이터는 이벤트 참여 릴레이션에 삽입할 수 없습니다.
        -- Update_갱신 이상 
            -- 중복 튜플 중 일부만 변경하여 데이터의 불일치가 발생하는 모순 문제입니다.
                -- 일부 튜플에 대해서 등급이 수정되는 경우 서로 다른 등급을 가지게 됩니다.
        -- Deletion_삭제 이상 
            -- 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실 문제입니다.
                -- 이벤트 참여를 취소하여 관련이 없는 고객 데이터가 모두 손실됩니다.
            
-- Normalization_정규화
    -- 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정입니다.
    -- 함수적 종속성을 판단하여 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해합니다.
    -- 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어가는 과정입니다.
    -- 분해_Decomposition하는 과정입니다.
    -- 목표
        -- 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현합니다.
    -- 주의 사항
        -- 정규화를 통해 릴레이션은 무손실 분헤_Nonloss Decomposition되어야 합니다.
        -- 릴레이션이 의미상 동등한 릴레이션들로 분해되어야 합니다.
        -- 분해로 인한 정보 손실이 발생하지 않아야 합니다.
        -- 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원이 가능해야 합니다.
    -- NF_Normal Form : 정규형
        -- 릴레이션이 정규화된 정도
        -- 각 정규형마다 제약 조건이 존재
            -- 정규형의 차수가 높아질수록 요구되는 제약 조건이 많아지고 엄격해집니다.
        -- 릴레이션의 특성을 고려하여 적합한 정규형을 선택합니다.
        -- 과정
            -- 정규형
                -- 기본 정규형
                    -- 제 1 정규형
                    -- 제 2 정규형
                    -- 제 3 정규형
                    -- BCNF_보이스/코드 정규형 : 강한 3 정규형입니다.
                -- 고급 정규형 : 잘 사용하지 않습니다.
                    -- 제 4 정규형
                    -- 제 5 정규형
            -- 관계
                -- 비정규 >> 제 1 >> 제 2 >> 제 3 >> BCNF >> 제 4 >> 제 5 
        -- 비정규형
            -- 다중값을 포함하고 있는 릴레이션입니다.
        -- 제 1 정규형 : 1NF_First Normal Form
            -- 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값_atomic value만 만족하면 됩니다.
            -- 데이터베이스의 릴레이션이 될 자격이 있습니다.
            -- 릴레이션에 속한 모든 속성의 도메인이 원자값으로만 구성되어 있습니다.
            -- 데이터 중복으로 인한 이상 현상이 발생할 수 있습니다.
                -- 아이디 -> 등급
                -- 아이디 -> 할인율
                -- 등급 -> 할인율
                -- 아이디, 이벤트 번호 -> 당첨 여부
            -- 제 1 정규형을 만족하지만 이상 현상이 발생하는 릴레이션입니다.
                -- 이상 현상의 발생 이유
                    -- 기본키인 아이디, 이벤트 번호에 완전 함수 종속되지 않습니다.
                    -- 일부분인 아이디에 종속되는 등급과 할인율 속성이 존재하기 때문입니다.
        -- 제 2 정규형 : 2NF_Second Normal Form
            -- 릴레이션이 제 1 정규형에 속하고 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되는 경우 만족합니다.
            -- 제 1 정규형의 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해합니다.
                -- 고객 릴레이션
                    -- 아이디 -> 등급, 할인율
                    -- 등급 -> 할인율
                -- 이벤트 참여 릴레이션
                    -- 아이디, 이벤트 번호 -> 당첨 여부
            -- 이상 현상의 발생 이유
                -- 등급과 할인율에서 이행적 함수 종속이 존재합니다.
                -- 이행적 함수 종속_Transitive FD
                    -- 릴레이션을 구성하는 3개의 속성 집합에 대해 A->B, B->C 가 존재하면 논리적으로 A->C가 성립합니다.
                    -- C가 A에 이행적으로 종속되었다고 합니다.
        -- 제 3 정규형 : 3NF_Third Normal Form
            -- 릴레이션이 제 2 정규형에 속하고 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않는 경우 만족합니다.
                -- 고객 릴레이션
                    -- 아이디 -> 등급
                -- 등급 릴레이션
                    -- 등급 -> 할인율
        -- BCNF_보이스/코드 정규형 : Boyce/Codd Normal Form
            -- 필요성
                -- 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 제 3 정규형까지 만족하지만 이상 현상이 발생할 수 있습니다.
            -- 강한 제 3 정규형이라고 합니다.
            -- 후보키를 여러 개 가지고 있는 릴레이션에 발생할 수 있는 이상 현상을 해결하기 위함입니다.
                -- 제 3 정규형보다 좀 더 엄격한 제약 조건을 제시합니다.
            -- 보이스/코드 정규형에 속하는 모든 릴레이션은 제 3 정규형에 속합니다.
            -- 제 3 정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하지는 않습니다.
            -- 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 경우를 의미합니다.
                -- 기본키에서 나머지 키에 대해 완전 함수 종속이 성립하지만 후보키가 아닌 값으로 후보키의 속성을 결정하는 상황은 만족하지 않습니다.
        -- 제 4 정규형
            -- 릴레이션이 보이스/코드 정규형을 만족하면서 다치 종속_MVD_Multi Valued Dependency를 제거하면 제 4 정규형에 속합니다.
        -- 제 5 정규형
            -- 릴레이션이 제 4 정규형을 만족하면서 후보키를 통하지 않는 조인 종속_JD_Join Dependency를 제거하면 제 5 정규형에 속합니다.
        -- 정규화 시 주의 사항
            -- 모든 릴레이션이 제 5 정규형에 속해야만 바람직한 것은 아닙니다.
            -- 일반적으로 제 3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결하는 경우가 많습니다.
    -- 정규화 과정
        -- 비정규형 릴레이션
            -- 속성의 도메인이 원자값으로만 구성되도록 분해합니다.
        -- 제 1 정규형 릴레이션 : 모든 속성의 도메인이 원자값으로만 구성됩니다.
            -- 부분 함수 종속 제거
        -- 제 2 정규형 릴레이션 : 모든 속성이 기본키에 완전 함수 종속됩니다.
            -- 이행적 함수 종속 제거
        -- 제 3 정규형 릴레이션 : 모든 속성이 기본키에 이행적 함수 종속이 아닙니다.
            -- 후보키가 아닌 결정자 제거
        -- 보이스/코드 정규형 릴레이션 : 모든 결정자가 후보키입니다.
            -- 다치 종속/ 조인 종속 제거
        -- 제 4/5 정규형 릴레이션

반응형