데이터베이스 이상현상은 트랜잭션 처리하는 중
발생하는 문제로 속성 간 종속이나 데이터의 중복으로 발생한다.
도대체,
여기서 말하는 속성간 종속이 무엇일까?
예시와 함께 알아가보자 🤓
속성간 종속
데이터베이스 테이블에서 하나의 속성(컬럼)의 값이 다른 속성(컬럼)의 값에 따라 결정되는 관계를 의미한다.
쉽게 말해, 하나의 속성이 다른 속성에 의존적인 상태이다.
예시
개발자 직군으로 예시를 들어보자.
개발자 ID | 개발자 이름 | 부서 ID | 부서 이름 |
1 | 박모씨 | 10 | 결제팀 |
2 | 김모씨 | 11 | 회원팀 |
3 | 이모씨 | 10 | 결제팀 |
위 테이블에서 부서이름은 부서ID에 종속적이다. 즉, 부서ID가 결정되면 자동으로 부서이름이 결정된다.
예시로, 부서ID가 10이면 부서이름은 항상 결제팀이여야 한다. 이와 같은 관계를 속성 간 종속이라 한다.
문제점
속성 간 종속성이 있으면 데이터베이스에 중복 데이터가 생기거나, 데이터 일관성이 깨질 수 있다.
예를들어, 부서ID가 10인 데이터가 여러 행에 걸쳐서 반복적으로 등장하는 것이 그 한 가지 예입니다.
(위 예시에는 2번 반복되고 있다.)
속성간 종속이 DB에 미치는 영향
삽입 이상(Insertion Anomaly)
개발자 정보와 부서 정보가 한 테이블에 결합되어 있기 때문에, 새로운 부서 정보를 삽입하려고 할 때, 해당 부서에 아직 소속된 직원이 없으면 부서 정보를 넣을 수 없게 된다.
갱신 이상(Modification Anomaly)
부서ID 10에 해당하는 부서이름이 결제팀에서 이벤트팀으로 변경되었다면, 테이블의 모든 행에서 부서ID 10을 가진 모든 부서이름을 일관되게 변경해야 한다. 혹여나 일부만 변경된다면, 데이터 불일치가 발생하게 된다.
삭제 이상(Deletion Anomaly)
개발자 정보가 없는 부서를 삭제해야 할 때, 해당 부서에 소속된 개발자 정보를 삭제하면서 동시에 부서 정보도 함께 사라질 수 있다. 이 역시 부서 정보가 테이블에 종속된 상태이기 때문에 발생한다.
해결 방법
결론부터 이야기 하자면, 정규화를 통해 문제를 해결한다.
정규화는 테이블을 분리하여, 데이터 중복을 줄이고, 각 테이블이 하나의 독립적인 개체만 나타내도록 구조화하는 과정이다.
정규화 후 테이블 변화
개발자 테이블
개발자ID | 개발자 이름 | 부서 ID |
1 | 박모씨 | 10 |
2 | 김모씨 | 11 |
3 | 이모씨 | 10 |
부서 테이블
부서ID | 부서 이름 |
10 | 결제팀 |
11 | 회원팀 |
테이블을 분리함으로 인해 부서 ID와 부서 이름 간의 속성 종속을 제거 하고, 데이터 이상 현상도 방지한다.
한줄 요약
속성 간 종속은 하나의 속성이 다른 속성 값에 의존하는 관계를 의미하고, 데이터베이스에 서 삽입, 갱신, 삭제 시 이상 현상을 일으킨다.
이러한 문제를 방지하기 위해 속성 간 종속을 제거하는 정규화 과정을 통해 데이터베이스의 무결성과 일관성을 유지한다.
'CS' 카테고리의 다른 글
[운영체제] 스케줄링 (0) | 2024.11.26 |
---|---|
CPU를 극단적으로 사용하기 (1) | 2024.08.28 |