이상현상
- 삭제이상(deletion anomly)
투플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상→ 연쇄삭제(triggered deletion) 문제 발생 - 삽입이상(insertion anomly)
투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상→ NULL 값 문제 발생 - 수정이상(update anomly)
투플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상 → 불일치(inconsistency) 문제 발생
이상현상을 막는 예시
정규화
제 1정규형
- 릴레이션 R의 모든 속성 값이 원자값을 가지면 제 1정규형이라고함
- 제 1정규형으로 변환
고객 취미들(이름, 취미들) 릴레이션을 고객취미(이름, 취미) 릴레이션으로 바꾸어 저장하면 제 1정규형을 만족한다.
제 2정규형
- 릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때 제 2정규형이라고 함.
- 완전 함수 종속(full functional dependency)
A와 B가 릴레이션 R의 속성이고 A → B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전 함수 종속라고 함. - 적어도 제 2정규형까지는 구축해야 이상현상이 적은 데이터베이스 구축이 가능하다.
- 아래 그림은 제 2 정규형을 적용하여 완전함수 종속성을 만족하는 분리형태이다.
참고) 함수 종속성의 개념
- 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를 ‘속성 B는 속성 A에 종속한다(dependent)’ 혹은 ‘속성 A는 속성 B를 결정한다(determine)’라고 함.
- 'A -> B'로 표기하며, A를 B의 결정자라고 함.
EX) 학생번호 → 학생이름 , 강좌이름 → 강의실 등이 있다.
- 다만 학생이름 → 학과 의 경우 위 표에서는 종속하는 것처럼 보이지만 실제로는 종속하지 않음을 주의해야함.(이름이 같은데, 다른 학과 다른 학생일 수도 있기 때문)
- 종속관계는 눈에 보이는 것만으로 결정할 것이 아니라 앞으로 발생할 수 있는 종속관계도 생각해서 설계해야 한다.
- 함수 종속성 다이어그램
- 릴레이션의 속성 : 직사각형
- 속성 간의 함수 종속성 : 화살표
- 복합 속성 : 직사각형으로 묶어서 그림
- 성적은 화살표가 박스 밖에서 출발하므로 학생번호, 강좌이름 두개 모두가 있어야 결정할 수 있다는 의미이다. 나머지 속성들은 학생번호, 강좌이름 각각에 종속한다.
- 위 그림처럼 그림을 그려 제 2정규형 검사에 유용하게 사용할 수 있다.
함수 종속성 규칙
- 부분집합 규칙 : Y⊆X 이면 X→Y이다.
- 증가 규칙 : X→ Y 이면 XZ → YZ 이다. (단Z는 일반상수)
- 이행 규칙 : X → Y 이고 , Y → Z 이면 X→ Z 이다.
- 결합 규칙 : X→Y 이고 X → Z 이면 X → YZ 이다.
- 분해 규칙 : X → YZ 이면 X→Y 이고, X → Z 이다.
- 유사이행 규칙 : X → Y 이고 WY → Z 이면 WX → Z이다.
제 3정규형
- 릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적으로 종속할 때(직접 종속) 제 3정규형이라고 함.
- 이행적 종속이란 A → B 이고 B → C 이면 A → C가 성립되는 함수 종속성.
BCNF
- 릴레이션 R에서 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키이면 BCNF 정규형이라고 함.
- 현업에서도 대부분 BCNF까지만 정규형을 적용한다고 한다. 데이터의 분할이 더 필요하다고 판단된다면 그때 찾아서 적용하는 것을 추천하심
- 특강수강 릴레이션에서 교수는 key가 될 수 없다(중복되어서 나오기 때문)
- 위 사진처럼 쌍방간에 결정이 이루어지는 cycle 구조에서 사용
'데이터 엔지니어링 > 데이터베이스 및 운영체제' 카테고리의 다른 글
[LINUX] Oracle VM VirtualBox 사용해서 리눅스 설치하기 (4) | 2023.04.21 |
---|---|
데이터베이스 연동 자바 프로그래밍 (0) | 2023.03.27 |
ER 다이어그램 실습(ORALCE) (0) | 2023.03.24 |
데이터베이스 모델링 (0) | 2023.03.24 |
데이터베이스 프로그래밍(PL/SQL) (0) | 2023.03.24 |