4주차 - 이상현상, 정규화

1. 이상 현상이 뭘까요?

이상 현상(Anomaly)은 테이블을 잘못 설계해서 데이터 조작 시 발생하는 논리적 오류를 말합니다. 이상 현상에는 삽입 이상, 갱신 이상 그리고 삭제 이상이 있습니다.

모범 예상 답변

펼치기

이상 현상은 데이터베이스의 설계가 잘못되어 데이터 무결성이 깨지는 현상입니다. 삽입 이상, 갱신 이상, 삭제 이상 등이 있으며 정규화를 통해 이상 현상을 없앨 수 있습니다.

2. 삽입 이상(Insertion Anomaly)에 대해서 설명해주세요.

삽입 이상(Insertion Anomaly)은 데이터를 삽입할 때 원하지 않는 값을 포함해야만 테이블에 추가가 가능한 현상을 말합니다. 예를 들어 (아이디, 이메일, 이름, 비밀번호) NOT NULL 필드를 가지는 회원 테이블이 있습니다. 이 때 아이디, 이름, 비밀번호 필드만 가지고 신규 회원을 생성할 수 없습니다. 반드시 이메일 컬럼을 포함해야 하므로 원하지 않는 값을 포함하게 됩니다.

모범 예상 답변

펼치기

삽입 이상은 투플 삽입시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상입니다.

3. 갱신 이상(Update Anomaly)에 대해서 설명해주세요.

갱신 이상(Update Anomaly)은 중복된 데이터 중 일부만 수정되어 내용이 불일치하는 현상을 말합니다. 예를 들어 (학번, 과목명, 성적, 이름) 필드를 가지는 강의 테이블이 있습니다. 100 학번 A가 데이터베이스와 자료구조 과목을 수강하고 있습니다. A가 수강하는 데이터베이스 과목의 이름을 B로 바꾸면 학번과 이름의 1:1 매핑 불일치가 일어납니다.

모범 예상 답변

펼치기

갱신 이상은 투플을 업데이트할때 일부 데이터만 수정되어 데이터의 일관성이 깨지는 현상 입니다.

4. 삭제 이상(Deletion Anomaly)에 대해서 설명해주세요.

삭제 이상(Deletion Anomaly)은 어떤 정보를 삭제했을 때 삭제를 원하지 않는 값도 삭제되는 현상을 말합니다. 예를 들어 (학번, 과목명, 성적, 이름) 필드를 가지는 강의 테이블이 있습니다. 100 학번 A가 받은 성적 80점만 삭제할 수 없습니다. 반드시 다른 컬럼의 정보(학번, 과목명, 이름)의 정보도 같이 삭제해야 합니다.

모범 예상 답변

펼치기

삭제 이상은 투플을 삭제할때 다른 데이터까지 연쇄적으로 삭제되는 현상입니다.

5. 함수 종속성이 무엇인가요?

함수 종속성(Functional Dependency)는 두 필드의 집합이 다대일 관계로 사상되는 것을 말합니다. 어떤 테이블 R에 존재하는 필드들의 부분집합을 X와 Y라고 할 때, X의 값이 Y에 속한 어느 한 값에만 사상될 경우 Y는 X에 함수 종속되며 X -> 라고 표기합니다. 예를 들어 (생일, 나이) 필드를 가지는 회원 정보 테이블이 있습니다. 이 때 나이는 생일에 함수 종속 관계입니다. 생일을 알고 있다면 나이 필드를 참조하지 않아도 나이를 계산할 수 있습니다.

함수 종속의 성질

어떠한 테이블 R에 대해 X, Y, Z라는 필드의 집합이 있는 경우 함수 종속은 다음 성질을 만족합니다. (이를 암스트롱의 공리라고 합니다).

  • augmentation: X -> Y이면, XZ -> YZ이다.

  • transitivity: X -> Y이고 Y -> Z이면 X -> Z이다.

  • reflexivity: Y가 X의 부분집합이면 X -> Y이다.

  • self-determination: X -> X이다(자기 자신은 함수 종속적이다).

  • union: X -> Y이고 X -> Z이면, X -> YZ이다.

  • decomposition: X -> YZ이면, X -> Y이고 X -> Z이다.

모범 예상 답변

펼치기

테이블에서 어떤 속성의 값이 다른 속성의 값을 결정하는 성질을 함수적 종속성이라고 합니다. 예를들어 A라는 테이블에 속성 X의 값에 대해 속성 Y의 값이 오직 하나만 연관되어 있을때 Y는 X에 함수적으로 종속된다고 합니다. 이때 X를 결정자, Y를 종속자라고 합니다.

6. 완전 함수적 종속은 뭔가요?

완전 함수적 종속은 기본키에만 함수 종속이 일어나는 종속 관계를 말합니다. 만일 기본키가 복합키인 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속됩니다. 예를 들어 (주민번호, 이름, 성별, 주소) 필드를 가지는 테이블이 있습니다. 테이블에서 주민번호 필드를 제외한 다른 필드로는 유일한 튜플을 식별할 수 없습니다. 이 경우 주민번호라는 속성에만 다른 속성이 종속되는 완전 함수 종속이 이루어졌다고 볼 수 있습니다.

모범 예상 답변

펼치기

완전 함수적 종속은 어떤 테이블에서 속성 X가 속성 Y에 대해서 함수적 종속이고, X의 진부분집합에 대해서는 함수적 종속이 아닌 경우입니다. 어떤 속성이 기본키에 대해서만 종속적인 경우를 완전 함수적 종속이라고 할 수 있습니다.

7. 부분 함수적 종속은 뭔가요?

부분 함수적 종속은 기본키가 복합키인 경우 기본 키의 일부 속성에 종속되는 종속 관계를 말합니다. 예를 들어 (이름, 성별, 주소, 지역번호) 필드를 가지는 테이블이 있습니다. 이 테이블의 기본키는 (이름, 성별)입니다. (이름, 성별) -> (주소), (이름, 성별) -> (지역번호)이면서 (이름) -> (주소) 관계도 성립할 수 있습니다. 이 경우 기본키와 기본키의 일부 속성에 종속되는 부분 함수 종속이 이루어졌다고 볼 수 있습니다.

모범 예상 답변

펼치기

부분 함수적 종속은 어떤 테이블에서 속성 X가 속성 Y에 대해서 함수적 종속이고, X의 진부분집합에 대해서도 함수적 종속인 경우입니다. 어떤 속성이 기본키를 포함하는 복합키에 대해 종속적인 경우를 부분 함수적 종속이라고 할 수 있습니다.

8. 이행적 함수적 종속은 뭔가요?

이행적 함수적 종속은 X, Y, Z라는 3개의 속성이 있을 때 X -> Y, Y -> Z 종속 관계가 있을 경우 X -> Z가 성립되는 종속 관계를 말합니다. 예를 들어 (이름, 성별, 주소, 지역번호) 필드를 가지는 테이블이 있습니다. 이 테이블의 기본키는 (이름, 성별)입니다. X(이름, 성별) -> Y(주소), X(이름, 성별) -> Z(지역번호) 종속 관계가 성립합니다. 이 때 Y(주소) -> Z(지역번호) 관계가 성립합니다. 이 경우에 X를 통해 Y, Z를 알고 Y -> Z가 성립되므로 이행 함수 종속이 이루어졌다고 볼 수 있습니다.

모범 예상 답변

펼치기

이행적 함수적 종속은 테이블에서 A 속성이 B 속성을 함수적으로 종속하고, B 속성이 C 속성을 함수적으로 종속할때 A 속성이 C 속성을 종속하는 것을 말합니다.

9. 정규화(Normalization)에 대해서 설명해주세요.

정규화(normalization)는 RDBMS 설계에서 데이터 중복을 최소화하는 구조를 말합니다. 정규화된 DB는 무결성을 유지하므로 더욱 효율적으로 데이터 연산을 수행합니다. 조인이 많이 발생해서 성능 저하가 일어나면 반정규화(de-normalization)을 적용할 수도 있습니다.

장점?

  • 이상 현상 제거

  • 확장 시 구조 변경이 용이

  • 연동된 응용 프로그램에 대한 낮은 영향력

단점?

  • 릴레이션 분해로 JOIN 연산 증가

  • 정규화에 따라 질의 응답 시간 증가

모범 예상 답변

펼치기

정규화는 테이블을 분해하여 데이터의 중복을 최소화시켜 이상 현상을 없애는 작업입니다.

10. 제 1 정규형에 대해서 설명해주세요.

제 1 정규화(1NF)는 테이블의 컬럼이 원자값(Atomic value)을 갖도록 테이블을 분해하는 것입니다. 제 1 정규화는 다음 규칙을 만족해야 합니다.

  • 각 컬럼이 하나의 속성만을 가져야 합니다.

  • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 합니다.

  • 각 컬럼이 유일한 이름을 가져야 합니다.

  • 컬럼의 순서가 상관없어야 합니다.

모범 예상 답변

펼치기

제 1 정규형은 테이블의 모든 속성의 도메인이 원자값만으로 되어있는 정규형 입니다. 예를들어 주문목록 테이블의 주문번호 속성에 주문번호 값이 여러개 들어있다면 제 1정규형을 만족하지 못합니다.

11. 제 2 정규형에 대해서 설명해주세요.

제 2 정규화(2NF)는 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다. 제 2 정규화는 다음 규칙을 만족해야 합니다.

  • 제 1 정규화를 만족해야 합니다.

  • 모든 컬럼이 완전 함수 종속을 만족해야(부분 함수 종속이 없어야) 합니다.

모범 예상 답변

펼치기

제 2 정규형은 제 1정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형입니다.

12. 제 3 정규형에 대해서 설명해주세요.

제 3 정규화(3NF)는 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다. 제 3 정규화는 다음 규칙을 만족해야 합니다.

  • 제 2 정규화를 만족해야 합니다.

  • 기본키를 제외한 속성들 간의 이행 종속성(Transitive Dependency)가 없어야 합니다.

모범 예상 답변

펼치기

제 3 정규형은 제 2 정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형입니다.

13. BCNF 정규형에 대해서 설명해주세요.

BCNF(Boyce-codd Normal Form)은 3차 정규화의 확장판으로 모든 결정자가 후보키 집합에 속한 정규형을 말합니다. BCNF는 다음과 같은 규칙을 만족해야 합니다.

  • 제 3 정규화를 만족해야 합니다.

  • 모든 결정자가 후보키 집합에 속해야 합니다.

모범 예상 답변

펼치기

BCNF 정규형은 테이블의 모든 결정자 속성이 후보키인 정규형을 말합니다.

14. 반정규화에 대해서 설명해주세요.

반정규화(de-normalization)는 성능 향상을 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 과정을 말합니다. 조인이 많이 발생해서 성능 저하가 일어나면 반정규화를 적용할 수 있습니다.

모범 예상 답변

펼치기

반정규화는 정규화로 나눠진 테이블들을 성능상의 이유로 다시 합치는 작업입니다. 정규화로 인해 테이블들이 여러개로 쪼개져서 join이 많이 발생한다면 성능 이슈가 발생합니다. 이런 경우에는 정규화에는 위배되지만 성능 향상을 위해 테이블을 합치는 방법을 선택할 수 있습니다.

참고 자료

Last updated