일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 99클럽
- 스프링 핵심 원리 - 기본편
- Spring
- 백준
- 데이터베이스
- BFS
- 우선순위큐
- 브루트포스
- 동적 프로그래밍
- 그리디
- BinarySearch
- DP
- 네트워크 계층
- 정렬
- 코딩테스트준비
- 스프링
- 개발자취업
- 그래프
- DFS
- 자바
- 프로그래머스
- Til
- 백트래킹
- lower bound
- 그래프 이론
- 트리
- Java
- 항해99
- 알고리즘
- 완전탐색
- Today
- Total
AtraFelis's Develop Diary
[DataBase] 데이터베이스의 이상 현상(Anomaly) 본문
불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용을 이상 현상이라고 한다. 이런 이상 현상을 제거하기 위해 릴레이션을 분리하는 것을 정규화라고 한다. 정규화에 관한 내용은 다음 포스트에 다룰 예정이다.
이상 현상은 각 연산에 대응하여 세 가지가 존재한다.
- 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제 이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
다음과 같은 학생-강의 릴레이션
이 존재한다고 가정해보자.
StudentID | StudentName | LectureID | LectureName |
---|---|---|---|
S001 | 홍길동 | L001 | 데이터베이스 |
S002 | 김영희 | L002 | 운영체제 |
S003 | 이철수 | L001 | 데이터베이스 |
삽입 이상 insertion anomaly
릴레이션에 새 데이터를 삽입하기 위해, 불필요한 데이터도 함께 삽입되거나, 데이터가 일부 누락되어 삽입할 수 없는 경우에 발생하는 문제이다.
위 학생-강의 릴레이션
에 새로운 강의를 하나 추가한다고 생각해보자. 이때, 이 강의는 새롭게 개설되는 강의이므로 아직 아무도 이 강의를 수강하고 있지 않다. 위 릴레이션에는 학생 정보가 없는 경우 강의 정보를 삽입할 수 없으므로, 삽입 이상이 나타난다.
StudentID | StudentName | LectureID | LectureName |
---|---|---|---|
S001 | 홍길동 | L001 | 데이터베이스 |
S002 | 김영희 | L002 | 운영체제 |
S003 | 이철수 | L001 | 데이터베이스 |
S000 | NULL | L003 | 객체지향프로그래밍 |
학생 ID, 학생 이름을 임의로 설정하거나, NULL
로 하여 억지로 추가할 수도 있겠지만, 이런 의미없는 데이터가 추가된다는 건 왠지 좀 꺼려지는 일이다.
갱신 이상 update anomaly
특정 데이터를 갱신할 때 데이터의 일부만 갱신되어 데이터 불일치가 발생하거나 여러 번 갱신해야 하는 비효율성이 발생하는 문제를 말한다.
위 학생-강의 릴레이션
에서 여러 명이 수강하는 강의인 '데이터베이스'의 강의명을 '데이터베이스 개론'으로 변경하려 한다고 생각해보자. '데이터베이스'를 수강하는 학생은 홍길동과 이철수로 총 두 명이다. 이때 '데이터베이스'를 '데이터베이스 개론'으로 변경하는 방법은 간단하다.
update 학생-강의 set LectureName='데이터베이스 개론'
where LecutreName='데이터베이스'
이렇게 쿼리문을 주면 강의명이 '데이터베이스'인 모든 레코드의 강의명이 '데이터베이스 개론'으로 변경될 것이다. 얼핏보면 별 문제 없어보이지만, 위 릴레이션의 규모를 키워서 생각해보면 상황이 달라진다.
삭제 이상 deletion anomaly
특정 데이터를 삭제할 때 의도하지 않은 다른 데이터까지 함께 삭제되는 문제를 말한다.
다시 한 번 학생-강의 릴레이션
을 가져와서 생각해보자. 만약, 학번이 S002인 김영의 학생에 대한 레코드를 삭제한다고 생각해보자. 이 학생이 운영체제 과목을 수강 취소를 했다고 가정하면 된다. 이때 어떤 문제가 발생할까?
StudentID | StudentName | LectureID | LectureName |
---|---|---|---|
S001 | 홍길동 | L001 | 데이터베이스 |
S003 | 이철수 | L001 | 데이터베이스 |
나는 김영희 학생의 정보를 삭제했을 뿐인데, 운영체제 과목에 대한 정보도 완전히 사라져버렸다. 이렇게 의도하지 않은 다른 데이터까지 함께 삭제되어버리는 경우를 삭제 이상이라고 한다.
이것으로 데이터베이스에서 발생할 수 있는 세 가지의 이상 현상에 대해 알아보았다. 다음 글에는 이러한 데이터베이스의 이상 현상을 해결하는 방법인 정규화에 대해서 다루고자 한다.
references
한빛미디어, 데이터베이스 개론. 한빛미디어, 2022.
'DataBase' 카테고리의 다른 글
[DataBase] 함수 종속과 정규화 (0) | 2024.12.09 |
---|---|
E-R모델을 이용한 관계 데이터베이스 설계 방법 (0) | 2024.11.27 |
[SQL] SELECT로 데이터 출력하기 (0) | 2024.11.18 |
[DataBase] 인덱스(index)란? (0) | 2024.09.04 |
[데이터베이스] 관계형 DB vs 비관계형 DB (0) | 2024.05.18 |