이상 & 함수적 종속

라코마코·2021년 2월 11일
0

데이터베이스

목록 보기
1/3

이상과 함수적 종속은 데이터 베이스 정규화를 설명하기 앞서서 꼭 알고 가야 하는 개념이다.

이 글은 이상과 함수적 종속에 대해서 내가 공부한 내용을 기록하고 정리하는 용도의 글이다.

데이터베이스 정규화

정규화란 데이터베이스의 데이터 중복을 없애고 테이블을 나누는 작업을 의미한다.
만약 데이터베이스가 정규화 되어있지 않다면 다양한 이상(Anomaly) 현상들이 발생하게 된다.

이상(Anomaly)

테이블에 데이터를 추가,삭제,변경시 모순이 발생하면 이를 이상현상이라고 부른다.

삽입 이상

학번이름학과학년과동아리
1김추추컴퓨터공학과3에니악
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘
3김설화전자공학과4쇼크
4김기추전기공학과1쇼크
5이성화전기공학과1???

현재 테이블엔 학번, 이름, 학과, 학년, 과동아리 속성들이 있다.
만약 이성화라는 이름의 신입생이 들어왔는데 아직 과동아리를 선택하지 않았다면
과 동아리에 넣을 값이 존재하지 않아 테이블에 추가할 수 없다.
이를 해결하고자 현재 테이블엔 ??? 이라는 미지정 값을 넣어 추가하였다.

삽입이상이란 테이블에 값을 추가하기 위해 의미없는 속성을 넣어야 하는 문제를 삽입이상 이라고 부른다.

갱신 이상

학번이름학과학년과동아리
1김추추컴퓨터공학과4에니악
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘
3김설화전자공학과4쇼크
4김기추전기공학과1쇼크

테이블에서 김추추 학생은 컴퓨터공학과와 문헌정보학과를 복수전공하고있다.
1년이 지나 학년이 올라간다면 테이블에서 컴퓨터공학 & 문헌정보학과 2개의 학년을 1씩 더해야한다.

만약 컴퓨터공학과의 김추추만 학년을 1 더하게 된다면 문헌정보학과의 김추추는 학년에 모순이 생겨 갱신이상이 발생한다.

갱신이상이란 테이블 값을 변경할때 중복되는 행에서 모순이 생기는 문제를 말한다.

삭제 이상

학번이름학과학년과동아리
1김추추컴퓨터공학과3에니악
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘
3김설화전자공학과4쇼크

전기공학과에 소속되어있는 단 한명의 학생 김기추 학생이 자퇴하게되어 테이블에서 삭제되었다.

김기추 학생을 삭제하는것은 문제가 없는데, 전기공학과 학생은 김기추 학생뿐이라 테이블에서 전기공학과 데이터도 함께 사라지는 문제가 발생하였다.

삭제이상이란 테이블에 값을 삭제할때 불필요한 값도 함께 삭제되는 문제를 말한다.

함수적 종속

X->Y
X의 값을 알면 Y의 값도 알 수 있다면,
X가 Y를 함수적으로 결정한다.
Y는 X에 함수적 종속되어있다 라고 부른다.

학번이름학과학년과동아리
1김추추컴퓨터공학과3에니악
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘
3김설화전자공학과4쇼크
4김기추전기공학과1쇼크

예를 들어 위의 테이블에서는

이름이 학번에 함수적 종속관계에 있다.

학번은 PrimaryKey로 학번을 알면 이름도 알 수 있기 때문에 종속관계이다.

완전 함수적 종속 & 부분 함수적 종속

학번 -> 이름
(학번,이름) -> 과동아리
(이름,학과) -> 과동아리

과 동아리의 경우 (학번,이름) 조합과 (이름,학과) 조합으로도 값을 알아낼 수 있다.

여기서 완전 함수적 종속과 부분 함수적 종속으로 나누어지게 된다.

완전 함수적 종속

Y가 집합 X 전체에 대해서 종속관계를 가지면 완전 함수적 종속이다.

(이름,학과) -> 과동아리

현재 위의 조합이 완전 함수적 종속이라고 볼 수 있다.

김추추 같은 복수전공 학생의 경우 여러개의 과 동아리에 등록할 수 있어 이름,학과 한개의 속성만으로는 과동아리를 알아낼 수 없다.

이름,학과 조합이 완벽하게 일치해야 과 동아리 값을 알아낼 수 있어 완전 함수적 종속에 속한다.

부분 함수적 종속

Y가 집합 X의 부분 집합에 종속관계를 가지면 부분 함수적 종속이다.

(학번,이름) -> 과동아리

학번의 경우 PK 임으로 학번을 알아냄으로써 과동아리도 알 수 있다.

따라서 학번 -> 과동아리 도 가능하다는 뜻이다.

과 동아리는 (학번,이름) 집합의 부분 집합인 (학번)으로도 알아낼 수 있기에 부분 함수적 종속이라고 볼 수 있다.

0개의 댓글