본문 바로가기

프로그래밍/mySQL

[mySQL] 스키마, 정규화

스키마 : 테이블과 테이블이 어떻게 연결되는지 표현한 것.


테이블을 두개로 만드는 방법

1. 하나의 열을 없애고 없앨 열의 테이블을 따로 만들어 넣는다.

2. 원래 테이블의 기본키를 새 테이블의 참조키로서 삽입한다.

(두개의 테이블을 연결하는 방법)



참조키를 포함한 테이블 생성 방법

CREATE TABLE family

(

basic_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,   //family테이블의 기본키 지정

family_name VARCHAR(30) NOT NULL,    //열 생성

f_id INT NOT NULL,                      //참조용 키(f_id) 생성

CONSTRAINT my_table_count_id_fx       //참조할 테이블과 그 기본키에 제약조건을 건다

FOREIGN KEY ( f_id )                    //참조키 지정

REFERENCES my_table ( count_id )        //참조키가 참조하는 테이블과 열을 표시

);

//제약조건을 걺으로서 참조 무결성 유지. 즉, 부모 테이블의 키 값만을 넣을 수 있다.



스키마 관계

1. 1:1 관계

- 꼭 필요한 상황에만 쓰이고 잘 안쓰임(빠른조회, 대용량자료, 보안)

2. 1:N 관계

- 하나의 부모키로 테이블의 여러 열을 조회

3. N:N 관계

- 여러 부모키로 여러 열 조회

- 테이블과 테이블을 직접 다대다로 연결하면 모든 자료가 통합되버림

-> 중간에 연결 관계를 알려주는 연결 테이블을 생성하여 1:N의 관계를 두개로 연결하여 사용한다.


합성키

-합성키는 두개 이상의 열을 선택해 유일무이한 하나의 기본키로 만드는 것.


종속적 관계

- 열의 데이터가 바뀌면 종속되는 데이터도 같이 바뀐다.


종속관계 표기법

T.x ->; T.y

//T 테이블에서 열 y는 x에 함수적으로 종속된다.





정규화

제1정규형

 - 열은 원자적 값만 포함. (콤마로 여러 데이터를 하나의 열에 포함하면 안됨, 하나의 성분만을 포함)

 - 같은 데이터가 여러 열에 반복하면 안됨.


제2정규형

 - 제1정규형을 포함

 - 부분적 함수 의존이 없다.


이와 같이 부분적 종속이 아닌 절대 종속인 부분들로 나눠서 구성한다.

위의 toy_id, store_id는 합성키이다.


제3정규형

 - 제2정규형 포함

 - 이행적 종속이 없다(??)


고유한 데이터 : 개인의 특수한 정보와 같은 하나뿐인 데이터

일정한 범위의 데이터 : 이미 정해진 데이터들의 집합