본문 바로가기

외부 활동/JSCODE 데이터베이스 면접

4주차 이상 현상, 정규화

Anomaly(이상현상)

데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성이 저하된다. 

이러한 원인은 데이터 이상 현상(Anomaly)에 의해 발생하며, 

이상 현상으로 인해  현실세계의 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생한다. 

데이터 이상은 삽입 이상, 업데이트 이상, 삭제 이상이라는 세 가지 유형이 존재한다. 

 

삽입 이상(Insertion anomaly)

삽입 이상은 특정 데이터가 존재하지 않아 중요한 데이터를 데이터베이스에 삽입할 수 없을 때 발생한다.

 

삭제 이상(Deletion anomaly) 

삭제 이상은 특정 정보를 삭제하면, 원치 않는 정보도 삭제되는 현상이다. 

 

업데이트 이상(Update anomaly)

테이블의 특정 데이터를 업데이트했는데, 정상적으로 변경되지 않은 경우

그리고 너무 많은 행을 업데이트하는 현상이다. 

 

 

 

 

함수적 종속

 

함수적 종속이란 어떤 릴레이션 R이 있을때 X와 Y를 각각 속성의 부분집합이라고 가정한다.

여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의 값이 달라질 때, Y는 X에 함수적 종속이라고 한다.

이 경우 X를 결정자, Y를 종속자라고 합니다. 이를 기호로 표현하면 X→Y이다.

이런 함수적 종속관계에는 완전 함수적 종속과 부분 함수적 종속 및 이행적 함수 종속이 있다. 

 

이 릴레이션에서는 '학번'을 알면 '이름', '나이', '성별' 속성을 식별할 수 있으며, '힉번'이 다르면 그에따른 값도 다르다.

따라서 '이름', '나이', '성별' 속성은 '힉번'에 함수적인 종속관계이다.

같은 이유로 전공 속성또한 '전공코드'에 함수적인 종속관계에 있다.

 

학번→이름, 학번→나이, 학번→성별 

 

1) 완전 함수적 종속(Full Functional Dependency)

종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우

기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우이다.

이 릴레이션에서는 기본키가 '회원번호' 속성으로 구성되어 있다. 

여기서 '이름', '나이', '거주지역' 속성은 기본키인 '회원번호'을 알아야 식별 가능하다. 

따라서 '이름', '나이', '거주지역'은 '회원번호'에 완전 함수 종속된 관계이다 .

 

 

2) 부분 함수적 종속(Partial Functional Dependency) 

부분 함수적 종속이란, 릴레이션에서 종속자가이 기본키가 아닌 다른 속성에 종속되거나,

기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속되는 경우이다. 

기본키가 '고객ID'와 '제품코드' 속성으로 구성된 위의 릴리이션에서서 '주문상품'은 기본키 중 '제품코드'만 알아도 식별할 수 있다. 

이 경우에는 '주문상품' 속성은 기본키에 부분 함수 종속된 관계이다. 

 

3) 이행적 함수 종속(Transitive Functional Dependecy)

릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우,

X→Z가 성립될 때 이행적 함수 종속이라고 합니다. 즉, X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우. 

 

 

이 릴레이션에서 '상품번호'를 알면 '소분류'를 알 수 있고, '소분류'을 알면 '대분류'도 알 수 있다.

따라서 '상품번호'를 알면 '대분류'를 알 수 있으므로 이행적 함수 종속 관계이다.

이때, 대분류는 소분류에 의해 관계되는 항목이지만, 상품번호를 통해 귀속되어있다.

 

 

 

 

정규화, 반정규화

 

 

비정규화(Denormalization, 반정규화)

하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법이다. 

시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 

의도적으로 정규화 원칙을 위배하는 행위이다.

 

비정규화는 다른 타협안을 내놓음으로써 그런 단점을 해소하고자 한다. 

어느 정도의 데이터 중복이나 그로 인해 발생하는 데이터 갱신 비용은 감수하는 대신 

조인 횟수를 줄여 한층 효율적인 쿼리를 날릴 수 있도록 하겠다는 것이다.

 

장점 

조인 비용이 줄어들어 빠른 데이터 조회 

살펴볼 테이블이 줄어들기 때문에 데이터 조회 쿼리가 간단해짐 → 따라서 버그 발생 가능성도 줄어든다

 

단점 

데이터 갱신이나 삽입 비용이 높음 

데이터 갱신 또는 삽입 코드를 작성하기 어려워짐 

데이터 간의 일관성이 깨어질 수 있다. 어느 쪽이 올바른 값인가? 

데이터를 중복하여 저장하므로 더 많은 저장 공간이 필요

 

 

비정규화 대상 

자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많고항상 일정한 범위만을 조회하는 경우 

테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우성능 상 이슈가 있을 경우

 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우 

.

대부분의 대규모 IT 업체의 경우처럼, 규모 확장성(scalability)을 요구하는 시스템의 경우 

거의 항상 정규화된 데이터베이스와 비정규화된 데이터베이스를 섞어 사용한다.

 

주의점 

반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있다. 

입력, 수정, 삭제의 질의문에 대한 응답 시간이 늦어질 수 있다.

 

 

중복된 정보로 인해 발생하는 문제들을 이상 현상(Anomaly)이라 말한다.

→ 이상 현상은 정규화를 통해 방지할 수 있다.

 

정규화(Normalized)

관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다. 

좀 더 구체적으로는 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정이라 할 수 있다. 

 

한 릴레이션에 여러 Entity의 Attribute들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 

또한 중복된 정보로 인해 '갱신 이상'이 발생하게 된다. 

동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 되는 것이다. 

 

이러한 문제를 해결하기 위해 정규화 과정을 거친다.  

정규형 

특정 조건을 만족하는 릴레이션의 스키마의 형태 

제1 정규형, 제2 정규형, 제3 정규형, BCNF형, 제4 정규형, 제5 정규형이 존재한다. 

차수가 높아질수록 만족시켜야 할 제약 조건이 늘어난다.

 

장점 

데이터베이스 변경 시 이상 현상(Anomaly) 제거 

저장 공간의 최소화 가능 

효과적인 검색 알고리즘 생성 가능 

데이터 삽입 시 릴레이션 재구성의 필요성 감소 데이터 구조의 안정성 및 무결성 유지 

 

단점

릴레이션 간의 JOIN 연산 증가 → 이로 인한 질의에 대한 응답 시간 저하

 

정규화의 원칙 

정보의 무손실 표현 → 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 된다. 

분리의 원칙 → 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다. 

데이터의 중복성이 감소되어야 한다.

 

 

 



https://dodo000.tistory.com/20

 

10. 함수적 종속(Functional Dependency)

함수적 종속(Functional Dependency) 함수적 종속이란 어떤 릴레이션 R이 있을때 X와 Y를 각각 속성의 부분집합이라고 가정해봅니다. 여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의

dodo000.tistory.com

 

 

 

 

 

 

 

https://owlyr.tistory.com/20

 

[데이터베이스] 정규화 vs. 비정규화(반정규화)

💡 정규화 vs. 비정규화(반정규화) 데이터베이스 정규화 데이터베이스 비정규화 데이터베이스 비정규화(Denormalization, 반정규화)란 무엇인가? 장점, 단점 비정규화 대상 주의점 정규화(Normalized)란

owlyr.tistory.com

 

 

 

 

 

 

 

 

 

 

'외부 활동 > JSCODE 데이터베이스 면접' 카테고리의 다른 글

5주차 : 트랜잭션, 회복  (2) 2023.12.06
4주차 면접예상 질문  (0) 2023.11.28
3주차 면접 예상 질문  (0) 2023.11.20
3주차 인덱스  (0) 2023.11.20
2주차 면접 예상 질문  (0) 2023.11.14