티스토리 뷰

공부/MYSQL

[MySQL] 스키마, 참조키

cldy 2018. 8. 17. 12:45

* 본 게시물은 HeadFirst 교재를 공부 목적으로 정리한 글 입니다.

스키마

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


참조키


참조키란?

참조키는 테이블의 한 열로 다른 테이블의 기본키를 가르킴.

테이블을 연결하는데는 유일한 열이 필요함. 즉, 기본키 값을 참조키로 사용.

참조키는 연결되는 기본키와 다른 이름 일 수 있다? > YES

참조키에서 참조하는 기본키는 부모키, 부모키가 있는 테이블은 부모 테이블.

참조키는 한 테이블의 열들이 다른 테이블의 열과 연결되도록 하는데 사용.

기본키는 null일 수 없지만 참조키 값은 null일수 있음.

참조키는 유일할 필요가 없음. - 실제로 유일하지 않은 경우가 많음.


참조키 제약조건

참조키의 값으로는 부모 테이블에 존재하는 키의 값만을 넣을 수 있음. 이를 참조 무결성 이라고 함. 규칙을 위반 하면 에러가 발생하여 실수로 위반하는 것을 막을 수 있음.

참조키를 사용하여 부모 테이블의 유일한 값을 참조할 수 있음.

참조키의 값이 부모 테이블의 기본키일 필요는 없지만 유일해야 함.


참조키가 있는 테이블 생성

CREATE TABLE interests(

int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, > 기본키 지정

interest VARCHAR(50) NOT NULL,

contact_id INT NOT NULL, > 참조키를 일반열을 만들 듯이 만듬.

CONSTRAINT my_contacts_contact_id_fk

> <제약조건> 참조키가 어느 테이블을 참조하는지(my_contacts), 키의 이름(contact_id) 또한 제약 조건이 참조키 (fk)라고 명명.

FOREIGN KEY(contact_id)  > 괄호 안의 열 이름이 참조키가 됨.

REFERENCES my_contacts(contact_id)  > 참조키가 어느 테이블을 참조하는지 표시, 다른 테이블의 열 이름을 표시.

);


테이블 간의 관계

세 가지 패턴 : 일대일, 일대다, 다대다

패턴을 찾으면 다중 테이블 -스키마- 의 설계는 간단.


데이터 패턴: 일대일

부모테이블 A의 레코드가 자식테이블 B에 한 개의 테이블과 연결됨.

ex) 주민번호 - 사람


데이터 패턴: 일대다

테이블A의 한 레코드와 테이블 B의 여러 레코드와 연결되지만, 테이블 B의 한 레코드는 테이블 A의 한 레코드에만 연결될 수 있음.


데이터 패턴: 다대다

여러 레코드에 여러 레코드가 연결 됨.

다대다일때 서로 연결하니까 중복 데이터가 많이 나옴.

중간에 테이블 하나를 추가하여 일대다의 관계로 단순하게 할 필요가 있음.

연결하려는 두 테이블의 기본키들을 열로 가지는 연결 테이블이 필요함.

두 테이블이 다대다의 관계이면, 중복 데이터가 생겨 제 1 정규형을 위반 함.

위반하지 말아야 하는 가장 큰 이유는 중복된 데이터 때문에 쿼리의 시간이 길어진다는 점.



댓글