안녕하세요.
정규화 공부중에 있습니다. 1~3정규화에 대해 분리작업은 할수있겠는데 몇가지 풀리지않는 의문이있어서 입니다.
비정규 릴레이션에대해 궁금한것이 있어 여쭤봅니다.
비정규 릴레이션 : 반복집합을 가질수있다.
한개의 기본키 값에 대해서 두개이상의 값을 가질수 있는 속성
이라고 정의는 되있는데...
1. 한개의 기본키값에 두개이상의 레코드가 생성된 구조라는 말인가요?
- pk구조상 가능하지않을꺼같은데, 그렇다면 그냥 1정규화부터 설명하기위한 구조인건지...
- 예시로 올라온 것들 대부분이 동일 PK값으로 반복된 레코드가 있는 설명들 뿐이라... 실질적으로 불가능한 구조같은데...
2. 한 컬럼에대해 데이터가 두개의 값이라는 말인가요?
- 어떤 설명은 한 컬럼에대해 데이터가 두개이니 그걸 새로운 레코드로 분리해서 관리에대해 설명을 하더군요.
물론 두 설명다 1정규화를 위한 예시로는 적절한거같은데 위와같은 의문들때문에...
3. (먼저 아래 내용에대해 공부하기 좋은거같아서 무단으로 지식인에서 긁어온 부분은 진심으로 사과드리는 바 입니다.
공부하는데 많은 이해가되서 좋은 예시라 생각해서 참고 하였습니다.)
학생의 수강과목 정보에서 전공에 대한 정보를 다음과 같이 보강하였다. 이 엔터티에 대해 제1, 제2, 제3 정규화를 시행하시오.
여기까지가 질문이고 아래부분이 대답입니다.
정규화의 목적
: 데이터의 중복을 제거하고 속성들을 본래의 제자리에 위치시키고자 하는것
1차 정규화
: 반복되는 그룹 속성을 제거한뒤 기본테이블의 기본키를 추가해 새로운 테이블을 생성하고 기존의 테이블과 1:N의 관계를 형성
이번 문제에서 반복 되는 그룹속성은 수강과목코드,수강과목명,수강학점 입니다.
학생 테이블과 수강 테이블의 1:N 관계 형성
학생
학번(PK) , 이름, 전공코드, 전공명
|
↓
수강
학번(PK,FK), 수강과목코드(PK) , 수강과목명 ,수강학점
2차 정규화
: 복합키에 전체적으로 의존하지 않는 속성을을 제거한다.
이번문제에서 복합키는 수강 테이블의 학번,수강과목코드 이다.
복합키가 일부분에 의존하는지 살펴보면 수강학점은 학번과 수강과목코드 전체에 의존적이지만
수강과목명은 수강과목코드에 지배되고 있다.
수강
학번(PK,FK), 수강과목코드(PK) , 수강학점
________________ |
↓
과목
수강과목코드(PK), 과정명
3차 정규화
: 기본키(PK)에 의존하지 않고 일반컬럼에 의존하는 컬럼을 제거
이번문제에서는 학생테이블의 전공명은 기본키인 학번에 의존하는 것이 아니라 일반컬럼인 전공코드에 의존하고 있다.
학생
학번(PK) , 이름, 전공코드
___________ |
↓
전공
전공코드(PK,FK), 전공명
전체적인 정규화 테이블을 만들어 보면 아래와 같게 나옵니다.~~!
학생
학번(PK) , 이름, 전공코드
| _______ |
| ↓
| 전공
| 전공코드(PK,FK), 전공명
|
↓
수강
학번(PK,FK), 수강과목코드(PK) , 수강학점
____________|
↓
과목
수강과목코드(PK), 과정명
============================================================================
제 생각에도 답변이 맞는거 같습니다.
그럼 만약에 답변이 맞다면... 3번 예시로된 최초의 테이블상태는 비정규 릴레이션 인가요?
만약 비정규 릴레이션 이라면 결국 다시 1번 질문이 가능한가?로 돌아가는 기분이라...
이해를 돕고자 여쭤봅니다.
감사합니다.