일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- github
- Java
- 정처기
- 프로그래머스
- Lv 2
- 코테
- 머신러닝
- 파이썬
- mysql
- programmers
- 자바
- 코딩테스트
- Linux
- 우분투
- Ai
- DevOps
- Python
- Kubernetes
- 깃
- docker
- ubuntu
- 데이터베이스
- git
- 알고리즘
- db
- 인공지능
- LV 0
- 쿠버네티스
- 리눅스
- 자료구조
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[ MySQL ] 데이터베이스 키(Key) 종류 - 기본키, 대체키, 후보키, 인공키 본문
728x90
반응형
Key (키)
- 데이터를 구분할 때 사용하는 컬럼들의 집합
- 예를 들어, 사용자 정보를 저장하는 테이블에서 {이메일}, {주민등록번호}, {아이디}, {이름, 전화번호} 등의 조합을 키로 사용할 수 있음.
Candidate Key (후보키 = 최소키)
- 후보키 = 최소키
- 키 중에서 데이터를 구분하는데 필요한 최소한의 정보만을 사용하는 키를 의미
- 예를 들어, {이메일}, {주민등록번호}, {아이디}, {이름, 전화번호} 중에서 {이름, 전화번호}는 두 가지 정보를 동시에 사용하므로 최소 항목이 아니라고 볼 수 있음.
Primary Key (기본 키)
- candidate key 중에서 DBMS 관리자가 사용하기로 결정한 키
- 예를 들어, DBMS 관리자가 '아이디' 컬럼 값을 데이터를 구분하는 키로 사용하기로 결정했다면, {아이디}가 주 키가 되고, 주 키로 선택되지 않은 모든 후보키는 대안 키가 됨
- 줄여서 PK라고 표시
- PK 컬럼을 지정하지 않으면 데이터가 중복 될 수 있음.
[예제]
create table test1(
name varchar(20) primary key,
kor int,
eng int,
math int
);
위의 코드의 경우 'name'열이 기본 키로 선언되며 데이터베이스는 이 필드에 대해 중복 값을 허용하지 않습니다.
만약, 둘 이상의 열을 사용하여 기본 키를 생성하는 경우 다음과 같이 작성합니다.
/*'이름' 과 '나이'의 조합이 기본 키인 경우*/
create table test1(
name varchar(20),
age int,
kor int,
eng int,
math int,
constraint test1_pk primary key(name, age)
);
Alternate Key (대체 키)
- candidate key 중에서 primary key로 선택된 키를 제외한 나머지 키
- 비록 primary key는 아니지만, primary key 처럼 데이터를 구분하는 용도로 대신 사용할 수 있다고 해서 대안 키 (Alternate Key) 라고 부름
- 대안 키는 DBMS에서 unique 컬럼으로 지정
[예제]
create table test1(
no int primary key,
name varchar(20),
age int,
kor int,
eng int,
math int,
constraint test1_uk unique (name, age)
);
Artificial Key (인공키)
- Primary Key로 사용하기에 적절한 컬럼을 찾을 수 없는 경우에 인공적으로 키로 사용할 컬럼을 추가
- 예시) 게시글 - 제목, 내용, 작성자, 등록일, 조회수 등으로는 구분하기 어려울 때
- 보통 일련번호를 저장할 정수 타입의 컬럼을 추가
- 예시) 게시글 번호라는 새로운 컬럼 추가
- 대다수의 SNS 서비스들은 이러한 일련 번호를 Primary Key 사용
- 회원 탈퇴의 경우 : 회원이 탈퇴하더라도, 그 회원이 작성한 게시글을 계속 유지해야하는 경우, 회원 아이디 대신 일련번호를 사용하면 아이디가 삭제되더라도 해당 게시글을 계속 유효하게 처리할 수 있음
728x90
반응형
'데이터베이스' 카테고리의 다른 글
[MySQL] SQL 삽입 공격 차단하기 - PreparedStatement 사용법 (0) | 2023.07.24 |
---|---|
[MySQL] JAVA에서 JDBC 드라이버를 이용한 MySQL DBMS 연동하기 (0) | 2023.07.24 |
[ MySQL ] SQL 문법 종류 - DDL, DML, DCL, TCL (0) | 2023.07.18 |
[ MySQL ] Gradle 빌드 파일에 MySQL JDBC Driver 추가하기 (0) | 2023.07.18 |
[ MySQL ] Windows 에 MySQL Community Server 8.0.33 로컬 설치 및 설정 (0) | 2023.07.17 |