🟨 목 차 🟨
1. Key 란 ?
1-1. 슈퍼키(Super Key)
1-2. 후보키(Candidate Key)
1-3. 기본키(Primary Key)
1-4. 대체키(Alternate Key)
1-5. 외래키(Foreign Key)
저번 시간에는 데이터의 성격을 정의하는 테이블 제약 조건 에 대해서 알아보았습니다.
이번 시간에는 데이터베이스에 저장되어 있는 레코드를 유일하게 구별할 수 있는 식별자인 KEY 에 대해 알아봅시다 :)
◼️ 1. Key 란 ? ◼️
키(key)란 데이터베이스에 저장되어 있는 레코드를 유일하게 구별할 수 있는 식별자(identifier)를 말한다.
데이터베이스에서 Key에 대해 말을 하면 데이터베이스 키(database key) 또는 디비 키(DB key)라고도 한다.
- 슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번}
- 복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키.
- 후보 키(Candidate key): 유일성과 최소성을 만족하는 키. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불린다. 예를 들면, 주민등록번호, 학번 등
- 기본 키(Primary key): 후보 키에서 선택된 키. NULL값이 들어갈 수 없으며, 기본키로 선택된 속성(Attribute)은 동일한 값이 들어갈 수가 없다.
- 대체 키(Surrogate key): 후보 키 중에 기본 키로 선택되지 않은 키.
- 외래 키(Foreign Key): 어떤 테이블(Relation) 간의 기본 키(Primary key)를 참조하는 속성이다. 테이블(Relation)들 간의 관계를 나타내기 위해서 사용된다.
자세히 알아보자.
◼️ 1-1. 슈퍼키(Super Key)
예를 들어 보겠다.
7조라는 팀에 팀원은 4명이 있다. 이 4명을 구분할 수 있는 것은 절대 겹치지 않는 학번 일수도 있고, 주민번호일 수도 있다.
이름과 나이를 묶어서 하나의 속성으로 만드는 것도 가능하다. 이름과 나이를 합쳐서 7조안에서 중복만 되지 않으면 가능하기 때문이다. 이름과 나이를 합쳐서 4명을 구분할 수 있으면 슈퍼키가 될 수 있다.
학번과 주민번호를 묶어서 슈퍼키로 만들수도 있고, 학번과 주민번호과 이름을 합쳐서 슈퍼키로도 만들수 있고, 학번과 주민번호과 이름과 나이를 합쳐서 슈퍼키를 만들수도 있다.
즉, 슈퍼키라는 것은 어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있으면 되는 것을 말한다.
◼️ 1-2. 후보키(Candidate Key)
슈퍼키에서 예를 든것으로 부터 4명을 구분하는 슈퍼키들이 모여 있는데, 슈퍼키들 중에서 속성은 최소한의 갯수로 4명을 구분 할 수 있어야 후보키가 될 수 있다.
위에서 말한 슈퍼키들은 학번 슈퍼키, 주빈번호 슈퍼키, 학번 + 주민번호 슈퍼키, 이름 + 나이 슈퍼키 등등으로 만들 수 가 있다.
여기서 학번 + 주민번호 슈퍼키, 이름 + 나이 슈퍼키 들은 2개의 속성을 묶은 슈퍼키 이다. 하지만 학번 슈퍼키, 주민번호 슈퍼키는 속성이 1개로 된 슈퍼키이다.
따라서 학번 슈퍼키와 주빈번호 슈퍼키는 최소한의 갯수의 속성(최소성)을 만족한다고 할 수 있어 후보키라고 할 수 있다.
◼️ 1-3. 기본키(Primary Key)
위에서 말한 슈퍼키들 중 최소한의 갯수(최소성)로 구분 할 수 있는 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
테이블에서 기본키는 오직 1개만 지정할 수 있다.
기본키는 NULL 값을 절대 가질 수 없고, 중복된 값을 가질 수 없다.
◼️ 1-4. 대체키(Alternate Key)
후보키가 두 개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라고 한다.
위에서 말한 것으로 예를 들자면 후보키로 학번과 주민번호가 뽑혔고, 둘 중에서 기본키는 학번이 되었다. 학번이 기본키가 되고 남은 후보키인 주민번호가 대체키가 될 수 있다. 만약 기본키가 없어지게 되면 주민번호는 없어진 기본키를 대체할 수 있게 된다.
◼️ 1-5. 외래키(Foreign Key)
상식적으로 참조 될 테이블(A)가 먼저 만들어지고 참조를 하려는 테이블(B)에 값이 입력되어야 한다.
==> 참조되는 부모테이블이 먼저 생성된 뒤에 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야 된다.
이때 참조를 하기위해선 참조 될 테이블에 참조를 할 필드의 값이 기본키로 설정되어 있어야만 한다.
외래키는 참조되는 테이블의 기본키와 동일한 키 속성(데이터타입)을 가진다.
부모 테이블 먼저 삭제될 수 없다.
==> 부모테이블을 참조하는데 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생긴다. 따라서 외래키 관계를 설정했고, 부모 테이블을 삭제하기 위해선 자식테이블 먼저 삭제한 후 부모 테이블을 삭제해야 한다.
'DB > MySQL' 카테고리의 다른 글
DB 정규화 (0) | 2022.08.23 |
---|---|
DB ERD 다이어그램 (0) | 2022.08.22 |
My SQL 테이블 제약 조건 feat.Workbench (0) | 2022.08.21 |
MySQL 테이블에서 원하는 데이터 쉽고 빠르게 찾기(INDEX) feat.Workbench (0) | 2022.08.20 |
MySQL 다른 쿼리 내부에 포함되어 있는 SELECT문(서브쿼리) feat.Workbench (0) | 2022.08.20 |