Oracle 14 키, 정규화

2023. 10. 10. 15:59database

key - 슈퍼키, 후보키, 대체키, 기본키 

기본키는 유일성이 있어야 한다

 

정규화

1정규화에서 중복된 정보를 제거화여 각 열에 하나의 값만 들어가야 한다.

비정규화된 상태

 

각 행에 수강정보를 (수학,P001(김교수),A-10) 처럼 (,)로 여러 수강정보를 입력하면 안 된다.

  -> 1정규화로 각 열에 하나의 값만 들어오게 한다 (원자화 - 더 이상 쪼갤 수 없을 때까지 만든다)

1정규화된 상태 - 더 이상 쪼갤 수 없는 상태

2정규화 - 부분 함수 종속성 제거한다 -> 기본키가 1개만 되게 테이블을 분리한다

학생 테이블 - 학번 , 이름

수강 신청 테이블 - 수강 과목, 담당 교수, 강의실

교수 테이블 - 교수 이름

이 3테이블이 분리되어야 하는데 위 테이블은 3 테이블이 붙어 있다

논리적으로 학번은 교수님 이름과 연관이 없다.

 

 

3정규화 이행함수 종속성 제거

학번으로 교수이름까지 연결되면 안 된다 -> 한 테이블에 기본키가 1개만 있어야 한다

 

FK(외래키)로 테이블 연결

수강과목정보 테이블에서 학번, 교수 속성 모두 FK(외래키)이다.

 

예제

1정규화

2행 도서SNO, 도서명, 수량, 단가 쪼개기

(데이터베이스 개론과 실습 ~) , (Java for Beginner ~) 나누기

 

 

 

아래의 테이블에서 회원번호가 기본키 될 수 있고 도서SNO가 기본키가 될 수 있고 주문번호가 기본키가 될 수 있다

부분 함수 종속성이 존재하기 때문이다. 2정규화로 부분함수종속성을 제거해야 한다.

1정규화 상태

주문번호로 회원 전화번호를 알 수 있는 것은 이행함수 종속성 때문이다. -> 주문회원 테이블에서 회원번호가 기본키이다 -> 주문번호와 회원 전화번호는 기본키 외의 속성이다.

2정규화 상태

 

주문회원테이블의 회원번호가 (FK)이다 -> 회원정보테이블에서 회원번호가 (PK)이다.

주문내역테이블의 도서SNO가 (FK)이다 -> 주문도서테이블의 도서SNO가 (PK)이다.

 

3정규화로 테이블이 4개가 됐다