2023. 10. 10. 15:59ㆍdatabase
key - 슈퍼키, 후보키, 대체키, 기본키
기본키는 유일성이 있어야 한다
정규화
1정규화에서 중복된 정보를 제거화여 각 열에 하나의 값만 들어가야 한다.
각 행에 수강정보를 (수학,P001(김교수),A-10) 처럼 (,)로 여러 수강정보를 입력하면 안 된다.
-> 1정규화로 각 열에 하나의 값만 들어오게 한다 (원자화 - 더 이상 쪼갤 수 없을 때까지 만든다)
2정규화 - 부분 함수 종속성 제거한다 -> 기본키가 1개만 되게 테이블을 분리한다
학생 테이블 - 학번 , 이름
수강 신청 테이블 - 수강 과목, 담당 교수, 강의실
교수 테이블 - 교수 이름
이 3테이블이 분리되어야 하는데 위 테이블은 3 테이블이 붙어 있다
논리적으로 학번은 교수님 이름과 연관이 없다.
3정규화 이행함수 종속성 제거
학번으로 교수이름까지 연결되면 안 된다 -> 한 테이블에 기본키가 1개만 있어야 한다
FK(외래키)로 테이블 연결
수강과목정보 테이블에서 학번, 교수 속성 모두 FK(외래키)이다.
예제
1정규화
2행 도서SNO, 도서명, 수량, 단가 쪼개기
(데이터베이스 개론과 실습 ~) , (Java for Beginner ~) 나누기
아래의 테이블에서 회원번호가 기본키 될 수 있고 도서SNO가 기본키가 될 수 있고 주문번호가 기본키가 될 수 있다
부분 함수 종속성이 존재하기 때문이다. 2정규화로 부분함수종속성을 제거해야 한다.
주문번호로 회원 전화번호를 알 수 있는 것은 이행함수 종속성 때문이다. -> 주문회원 테이블에서 회원번호가 기본키이다 -> 주문번호와 회원 전화번호는 기본키 외의 속성이다.
주문회원테이블의 회원번호가 (FK)이다 -> 회원정보테이블에서 회원번호가 (PK)이다.
주문내역테이블의 도서SNO가 (FK)이다 -> 주문도서테이블의 도서SNO가 (PK)이다.
'database' 카테고리의 다른 글
Oracle 16 JOIN 개념, INNER JOIN 실습, 3개 테이블 조인 (1) | 2023.10.11 |
---|---|
Oracle 15 GROUP BY ~ HAVING , PARTITION BY ~ (1) | 2023.10.10 |
Oracle 13 LEAST(), GREATEST(), DECODE(), DUMP(), SYS_CONTEXT() (0) | 2023.10.10 |
Oracle 01 - 2 sql developer 설치 , JSP 실습 계정 생성 , 윈도우 사용자 바꾸기 (0) | 2023.10.08 |
Oracle 01 - 1 오라클 설치 확인하고 DB 유저 설정 (0) | 2023.10.08 |