공부/데이터베이스2011. 7. 17. 19:01


테이블에서 원자적이지 않은 열을 새로운 테이블로 옮기기.

데이터베이스 내의 데이터(열들과 테이블들), 그리고 데이터들 사이의 연결 방식에 대한 표현을 스키마라고 한다.

테이블의 연결
테이블을 연결하기 위해서는 테이블에 기본키와 같은 유일한 열이 필요하다.
테이블은 참조키를 통해 다른 테이블의 기본키를 가리킨다.
참조키에서 참조하는 기본키를 부모키(parent key)라고도 한다.
참조키는 한 테이블의 열들이 다른 테이블의 열과 연결 되도록 하는데 사용할 수 있다.
기본키는 null일 수 없지만 참조키는 null일 수 있다.(부모 테이블의 기본키(primary key)를 안가리키는 것) 
제약조건(constraint)를 사용해서 null을 갖게 하지 못하도록 할 수 있다.
참조키는 유일할 필요가 없다.

참조키 제약조건
부모 테이블에 존재하는 키의 값만을 넣을 수 있도록 할 수 있다. 참조 무결성(referential integrity)
기본키가 있는 테이블에서 행을 지우거나 바꾸려고 할 때 제약조건으로 인해 삭제 수정이 맘대로 안된다.
참조키의 값이 부모 테이블의 기본키일 필요는 없지만 그 값이 유일(unique)해야 한다.

UNIQUE 키워드
열의 값이 유일하도록.

참조키가 있는 테이블 생성

CREATE TABLE interests (
int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VARCHAR(50) NOT NULL,
contract_id INT NOT NULL,
CONSTRAINT my_contacts_contact_id_fk
FOREIGN KEY (contact_id)
REFERENCES my_contacts (contact_id)

);
CONSTRAINT my_contacts_contact_id_fk
제약조건.
my_contacts : 참조키가 어느 테이블을 참조하는지.
contact_id : 키의 이름
fk : 참조키이다.

FOREIGN KEY (contact_id) 
contact_id가 참조키이다.

REFERENCES my_contacts (contact_id)
참조키가 my_contacts 테이블을 참조하고 contact_id 열을 참조한다.

테이블간의 관계

1. 일대일
테이블 A의 레코드가 테이블 B에 많아야 한 개의 레코드와 연결된다.
자주 이용되지는 않음.
보안목적. 일부 데이터를 위한 테이블.
큰 데이터 따로 저장.
모르는 값을 따로 저장.
따로 때어냄으로써 데이터 조회 속도 향상 등.

2. 일대다
테이블 A의 한 레코드에 테이블 B의 레코드 여러개가 연결되고 B의 레코드는 테이블 A의 한 레코드만 연결될 수 있다.
예) 한 직업에 여러명의 사람들. 사람들마다 직업이 많아야 하나.

3. 다대다
여러 레코드에 여러 레코드 연결.
신발가게의 신발과 고객과의 관계. 
중복데이터가 생겨 연결테이블을 만든다.

연결테이블
다대다관계일 때는 중간에 테이블을 추가하여 일대다의 관계로 단순화.
두 테이블의 유니크키들을 열로 가지는 연결 테이블

이전까진 테이블의 데이터가 다른 테이블과 서로 어떻게 연결되는지(일대일, 일대다)에 대한 것.
이제부턴 한 테이블 내의 열들이 어떻게 연결되는지에 대한 것.

합성키
여러 개의 열들로 구성되어 유일무이한 키를 만드는 기본키.

Functionally dependent
열의 데이터가 변경되면 다른 열의 데이터도 변경될 때. 한 열이 다른 열과 종속관계에 있다.

Independent
다른 열에 종속되지 않는 열

Partial functional dependency
키가 아닌 열이 합성키의 일부에 종속되는 경우.
기본키로 테이블 인덱스용 id 필드를 사용하면 다른 열이 이 열에 종속되지 않기 때문에 부분 종속 관계를 피할 수 있음.

transitive functional dependency
키가 아닌 열이 변경될 때 키가 아닌 다른 열이 변경될 경우

제2정규형
제1정규형이고
Partial functional dependency가 없어야 한다.

제3정규형
제2정규형이고 transitive functional dependency가 없다. 

'공부 > 데이터베이스' 카테고리의 다른 글

9. 서브 쿼리 (subqueries)  (0) 2011.07.19
8 조인과 다중테이블 연산  (0) 2011.07.19
6. 고급 SELECT문  (0) 2011.07.17
5장 ALTER  (0) 2011.07.16
4. 좋은 테이블 설계, 정규화.  (0) 2011.07.16


Posted by skyjumps