기본 3 - 관계, 키
Last updated
Last updated
데이터베이스는 여러개의 테이블로 이루어져있고, 서로 관계가 정의되어 있다.
이러한 관계는 화살표로 나타낸다.
1:1 필수
하나의 A는 하나의 B로 구성되어있다.
1
1:1 선택
하나의 A는 하나 이하의 B로 구성되어있다.
0 또는 1
1:N 필수
하나의 A는 하나 이상의 B로 구성되어있다.
1 이상
1:N 선택
하나의 A는 하나 이상의 B로 구성되어있다.
0 이상
유저당 이메일은 하나씩
쇼핑몰의 경우, 유저는 상품을 장바구니에 넣는다.
하나도 안담는 0개일수도 있고, 1개 이상을 넣을 수도 있으니, 0이상이 된다.
학생과 강의
학생은 강의를 많이 들을 수 있고, 강의도 여러명의 학생을 포함할 수 있다.
이 경우, 테이블과 테이블은 직접적으로 관계를 맺지 않는다. 중간에 관계 테이블을 하나 두어
학생 - 학생과 강의 매핑 테이블 - 강의 처럼 구성된다.
테이블 간의 관계를 조금 더 명확하게 하고,
테이블 자체의 인덱스를 위해서 설정된 장치로 아래와 같은 종류의 키가 있다.
기본키
외래키
후보키 : 유일성(중복되지 않는 값) + 최소성(필드를 조합하지 않고 최소 필드만 써서 키를 형성)
슈퍼키 : 유일성
대체키 : 기본키로 선택되지 못한 키
줄여서 PK 라고 함
유일성과 최소성을 만족하는 키
테이블의 데이터 중, 고유하게 존재하는 속성이다.
절대로 중복되어서는 안된다.
복합키는 최소성을 만족시키지 않는다.
1-홍길동, 2-홍길동 은 복합키로서 유일성을 만족한다.
하지만 숫자만으로 충분히 구별할 수 있는 레코드들이기 때문에 최소성을 만족하지는 않는다.
자연키나 인조키 중에 골라서 설정할 수 있다.
유저 테이블을 만든다고 가정한다면, 이름, 나이, 주소, 주민등록번호 등 다양한 속성이 나올 수 있다.
이때, 중복되지 않는 값인 주민등록번호가 키가 될 수 있다.
중복된 값을 제외하며 중복되지 않는 것을 자연스럽게 뽑다가 나오는 키를 자연키라고 한다.
하지만 자연키는 언젠가는 변하는 속성을 가진다.
인위적으로 부여하는 아이디이며 고유식별자이다.
오라클은 sequence, MySQL 은 auto increment 등을 통해서 설정할 수 있다.
자연키와는 다르게 변하지 않는다.
보통 이러한 인조키를 기본키로 설정한다.
FK 라고도 한다. 다른 테이블의 기본키를 그대로 참조하는 값.
개체와의 관계를 식별하는데 사용한다.
중복되어도 괜찮다.
candidate key 는 기본키가 될 수 있는 후보군들
유일성과 최소성을 동시에 만족한다.
후보키가 두 개 이상일 경우, 어느 하나를 기본키로 지정하고 남은 후보키들을 말한다.
각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키