이상 현상이 뭘까요?

이상현상은 데이터베이스의 테이블을 설계를 잘못하여 데이터를 가공할 때 데이터의 무결성이 깨지는 현상을 말합니다. 그 유형으로는 삽입이상, 갱신이상, 삭제이상으로 구성되어 있습니다.

 이상현상

  • 정규화를 거치지 않은 릴레이션에서 발생할 수 있는 이상 현상.
  • 데이터들이 불필요하게 중복.
  • 속성들의 종속관계를 하나의 릴레이션에 표현하기에 발생.
  • 삽입이상
    • 데이터 삽입 시 의도와 다른 값들도 삽입되는 것.
  • 삭제이상
    • 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제되는 것.
  • 갱신이상
    • 데이터 갱신 시 일부 튜플만 갱신되어 모순 발생.
  • 데이터 정규화를 통해 해결.
    학번 이름 나이 성별 강의코드 강의명 전화번호
    1011 이태호 23 AC1 데이터베이스 개론 010-1234-5678
    1012 강민정 20 AC2 운영체제 010-5325-6913
    1013 김현수 21 AC3 자료구조 010-5830-3291
    1013 김현수 21 AC4 웹 프로그래밍 010-5830-3291
    1014 이병철 26 AC5 알고리즘 010-2348-5892

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

삽입이상은 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가 가능한 현상을 말합니다. 위 테이블을 기준으로 강의를 아직 수강하지 않는 학생에게는 null값이 들어가야하는 문제가 생기는 경우를 의미합니다.

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

갱신이상이란 중복된 데이터 중 일부 데이터만 수정되어 데이터 간의 일관성이 깨지는 현상을 의미합니다. 강의코드 AC3의 김현수의 전화번호를 변경할 때 1013의 김현수의 전화번호가 모두 바뀌어야 하는데 AC3의 데이터에 해당하는 김현수의 전화번호만 바뀌는 현상을 의미합니다.

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

삭제이상이란 정보를 삭제할 때 의도하지 않은 정보까지 삭제되어 버리는 현상을 의미합니다. AC1인 데이터베이스 개론의 강의를 삭제하게 되면 이태호 학생의 데이터까지 삭제되는 현상이 발생합니다.

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

함수 종속성이란 속성들 간의 관련성을 말합니다. 이를 이용하여 이상현상을 예방할 수 있도록 릴레이션을 설계하는 과정이 정규화입니다.
    • 함수 종속성
      • 릴레이션의 속성 A와 B에 대해서 A값에 의해 B값이 유일하게 정해지는 관계
        (B는 A에 함수 종속이다. A → B, A는 결정자, B는 종속자)
      • 완전 함수 종속
        • 기본키를 구성하는 모든 속성에 종속되는 경우
      • 부분 함수 종속
        • 기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
      • 이행적 함수 종속
        • A→B, B→C가 종속관계일 때 A→C가 성립하는 경우
        학번 이름 학년 과목번호 성적
                 
      • 위와 같은 릴레이션이 있을 때(기본키: (학번, 과목번호)) 
      • 학생은 이름, 학번만 알아도 유일하게 결정.
      • 성적은 (학번, 과목번호)로 유일하게 결정
      • 학년과 이름은 (학번, 과목번호)에 대해 부분 함수 종속
      • 성적은 완전함수 종속

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

완전 함수적 종속은 X의 값이 Y의 값에 모두 포함되어 있는 것을 의미합니다

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

부분 함수적 종속은 X의 부분집합이 Y에 종속되어 있을 때를 의미합니다.

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

이행적 함수적 종속은 함수 종속 관계가 X → Y, Y → Z일 때 논리적으로 X → Z가 성립될 때 Z가 X에 이행적으로 함수에 종속되었다고 합니다.
이름 성별 주소 지역
       
  • X(이름, 성별) → Y(주소)
  • Y(주소) → Z(지역)
  • X(이름, 성별) → Z(지역)
  • X → Z

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

정규화는 데이터의 이상현상을 예방하고 효과적인 연산을 하기위한 기법으로, 릴레이션 간의 함수 종속성을 파악하여 기본키와 외래키를 이용하여 릴레이션을 효과적으로 설계하는 과정을 의미합니다.

 정규화

  • 속성간의 종속성으로 인해 발생하는 이상현상을 릴레이션 설계 시에 제약조건을 통해서 이상현상을 없애는 과정.
  • 정규형의 차수가 높아질수록 제약사항이 많아지고 엄격해지지만 이상현상의 발생 가능성이 떨어진다.
  • 릴레이션의 특성에 따라서 적합한 정규형을 선택해야함.

장점

  • 이상현상 해결
  • 속성의 구조 추가로 인해 DB 구조를 확장하는 경우, 구조 변경 최소화

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

제 1정규형은 릴레이션의 모든 속성의 도메인이 원자 값만으로 구성되어 있어야한다는 특성으로 예를 들어~~

제 1 정규형

  • 제 1 정규형만 지킨다면 데이터 중복 이상현상이 발생할 수 있다.
  • 기본키에 완전 함수 종속되지 못한 칼럼이 있다면 갱신, 삭제, 삽입 이상이 일어날 가능성 존재.
    부분 함수적 종속을 제거하여 제 2 정규형을 만족하도록.
    학번 과목코드
    CS123 B31, A15
    CS345 N04
    학번 과목코드
    CS123 B31
    CS123 A15
    CS345 N04
  • 왼쪽 테이블의 과목코드의 칼럼이 원자 값이 아님.
  • 오른쪽 테이블로 변경해야함.

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

제 2정규형은 릴레이션이 제1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다는 특성으로 예를 들어~~
학번 과목코드 성적 강의실
CS123 B31 80 1공 502
CS123 A15 90 1공 503
CS345 N04 87 클러스터 402

 

  • 테이블의 기본키: (학번, 과목코드)
  • (학번, 과목코드) -> 성적
  • (과목코드) -> 강의실
학번 과목코드 성적
CS123 B31 80
CS123 A15 90
CS345 N04 87
과목코드 강의실
B31 1공 502
A15 1공 503
N04 클러스터 402
  • 테이블을 분리하여 제 2정규형 만족

제 2 정규형

  • 이행적 함수 종속이 존재하면 갱신이상이 가능.
    이행적 함수 종속을 제거하여 제 3정규형을 만족하도록

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

제 3 정규형은 릴레이션이 제 2 정규형에 속하고, 모든 속성이 기본키에 이행적 함수 종속되지 않아야한다는 특성으로 예를 들어~~
학번 과목코드 수강료
CS123 B31 70000
CS123 A15 45000
CS345 N04 70000

 

  • 기본키: 학번
  • 학번 -> 과목코드
  • 과목코드 -> 수강료
  • 학번 -> 과목코드
학번 과목코드
CS123 B31
CS123 A15
CS345 N04
과목코드 수강료
B31 70000
A15 45000
N04 70000
  • 학번 -> 과목코드
  • 과목코드 -> 수강료 분리
  • 이를 통해 갱신 이상 해결 가능

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

BCNF 정규형은 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것으로
학번 과목명 담당교수
100 C123 P1
100 C234 P2
200 C123 P1
300 C234 P3
400 C234 P4
 
  • 3 정규형은 만족하지만 다음과 같은 이상 현상 가능
    • 삽입이상: 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가할 수 없다. 적어도 한 명 이상의 수강 학생이 필요하다.
    • 갱신이상: 학번 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.
    • 삭제이상: 삭제 이상 : - 갱신 이상 : P1의 과목이 변경되면 P1인 행을 모두 찾아 변경시켜주어야 한다.
  • 원인은 결정자(Determinant)가 후보키(Alternative Key)로 취급되고 있지 않기 때문이다.
  • 후보키는 슈퍼키(super key) 중에서 최소성을 갖는 키이므로 이 릴레이션에서는 (학번, 과목명)이나 (학번, 담당교수)가 후보키가 된다.
  • 담당 교수만으로는 후보키가 될 수 없다. 하지만, 후보키가 아님에도 과목명을 결정할 수 있기 때문에 담당 교수는 결정자에 속한다. 
    학번 담당교수
    100 P1
    100 P2
    200 P1
    300 P3
    400 P4
    담당교수 과목명
    P1 C123
    P2 C234
    P3 C234
    P4 C234

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

반정규화는 정규화를 통해 릴레이션을 디자인할 시 릴레이션의 분해나, 데이터베이스의 성능이 떨어지는 결과를 초래할 수 있습니다. 따라서 이러한 경우를 예방하기 위한 기술로 종류로는 테이블 통합/분할/추가/중복 속성 추가등이 있습니다. 반정규화 과정을 거치게 되면 데이터의 일관성이나 무결성이 보장되지 않을 수 있기에 개발자가 데이터 관리를 더욱 신경써야합니다.

 반정규화

  • 시스템의 성능 향상을 위해 정규화된 데이터 모델을 통합하는 작업
  • 종류
    • 테이블 통합
    • 테이블 분할
    • 테이블 추가
    • 중복 속성 추가
  • 시스템의 성능 향상
  • 데이터의 일관성이나 무결성 보장 불가능
    • 검색기능 향상
    • 갱신, 삭제 성능 낮아짐
  • 대상
    • 수행 속도가 많이 느린 경우
    • 테이블의 JOIN연산을 지나치게 사용하여 데이터를 조회하는 것이 어려운 경우
    • 테이블에 많은 데이터가 있고, 다량의 범위 혹은 특정 범위를 자주 처리해야하는 경우.

'Database > JSCode' 카테고리의 다른 글

[JSCode] Database 면접 스터디 회고록  (1) 2023.12.08
[JSCode] Database Week5  (2) 2023.12.05
[JSCode] Database Week3  (0) 2023.11.21
[JSCode] Database Week2  (1) 2023.11.14
[JSCode] Database Week1  (0) 2023.11.07

+ Recent posts