새소식

인기 검색어

SQL

기본키, 후보키(대체키/보조키), 외래키, 복합키

  • -

기본키


기본키는 DB에서 Primary Key라고 부른다.

 

선정하는 이유

예시로 짱구라는 이름을 찾으려고 할때 동명이인이 무수히 많다면 찾는데 오랜 시간이 걸린다.

하지만 학번이나 주민번호로 찾게되면 쉽게 찾을 수 있는데 이런 학번이나 주민번호는 중복되면 안되고 쉽게 찾을 수 있도록 하기 위해 기본키로 선정한다.

 

기본키의특징
  1. Null값을 가질 수 없다.
  2. 테이블에 저장된 행을 식별할 수 있는 유일한 값이어야 한다.
  3. 값의 중복이 없어야 한다.

 

 

 

 

후보키


 후보키란 테이블을 구성하다보면 기본키에 해당되는 컬럼들을 많이 만들 수 있는데 주민번호나 전화번호, ID가 이러한 것들이고 이런 주민번호나 전화번호, ID는 모두 기본키가 될 수 있다 즉, 후보키는 유일성과 최소성을 만족해야 한다.

여기서 모두 기본키가 될 수 있는 컬럼들을 후보키라고 한다.

 

그럼 보조키랑(대체키)는 무엇인가?

 주민번호나, 전화번호, ID 중 하나를 기본키로 정한다면 나머지는 보조키(대체키)가 되는 것이다. 

 쉽게 말해 후보키가 2개 이상이면 기본키를 제외하고 남은 키들을 말한다.

 

선정하는 이유-예시

 만약 기본키에 해당하는 정보들이 어떠한 사정 또는, 이유 때문에 중복이 되어야 한다면 우리는 기본키를 다시 정해야한다. 그렇기 때문에 이렇게 나눠놓는 것이다.

 

 

 

 

 

 

외래키


 

 외래키는 예시를 통해 바로 알아보도록 하겠다.

 

학교명 학번 이름 학과 주소 대표 전화번호
정보대학교 20230301 아무개 경영학과 서울 마포 02-0001
정보대학교 20230302 홍길동 세무학과 경기도 안산 02-0004
정보대학교 20230303 김이등 경영학과 경기도 수원 02-0001
정보대학교 20230304 최일등 세무학과 인천 02-0004

·

·

·

 

 위 테이블처럼 학교명, 학번, 이름, 학과, 주소, 대표 전화번호가  있고 학교명과 학과,  대표변호가 중복되고 학생들 수가 대략 3만명이 된다.

여기서 '경영학과'의 대표번호를 '02-0001' 에서 '02-0002'로 바꾸었고 '세무학과'가 이름을 개편해 '세무·회계학과'로 바뀌었다고 가정한다면 수 많은 학생들의 데이터를 일일히 다 수정하기에는 너무 비효율 적이다.

 

이럴때를 대비해 외래키가 존재합니다.

 

학번 이름 주소 학과코드
20230301 아무개 서울 마포 MAN
20230302 홍길동 경기도 안산 TAX
20230303 김이등 경기도 수원 MAN
20230304 최일등 인천 TAX

 

학과코드 학과 대표 전화번호 학교명
MAN 경영학과 02-0002 정보대학교
TAX 세무·회계학과 02-0004 정보대학교
MAN 경영학과 02-0002 정보대학교
TAX 세무·회계학과 02-0004 정보대학교

 

 

 이렇게 공통되는 요소(학과, 대표 전화번호, 학교명)들을 분리해서 학과 코드라는 것으로 묶어버릴 수 있고 서로 다른 2개의 테이블에 같은 컬럼이 존재하게 된다. 또한, 아무리 많은 데이터라도 학과나 대표 전화번호가 변경 될 경우 학과코드가 있는 테이블에 들어가서 수정만 해주면 된다.

 

 이렇게 학과코드는 두 테이블을 서로 연결하는데 사용되는 외래키가 된다.

 

외래키 사용 시 주의사항
  • 외래키 값은 Null이거나 부모 테이블의 기본키 값과 동일해야한다.
  • 부모 테이블의 기본키, 고유키를 외래키로 지정할 수 있다.
  • 부모 테이블의 기본키, 고유키가 여러개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정할 수 있다.

 

 

 

 

 

복합키


 복합키는 기본키가 되지 못하는 컬럼들을 서로 묶어서 기본키처럼 사용하는 것으로 복합키는 2개 이상의 컬럼을 묶어서 만들 수 있다.

 

 예를 들어 테이블을 만들고 데이터를 넣었는데 기본키가 없다면 10만개의 데이터를 어떻게 빠르고 쉽게 찾을 수 있을까?

거의 인덱스를 사용하면 가능하지만 그게 아니라면 불가능에 가까운데 이때 복합키를 사용한다.

 

 좀더 예를 들자면 이름과 사는 곳을 묶어서 복합키로 만들었는데 중복데이터가 발생한다면 성별로 묶고  또 중복 데이터가 발생한다면 생일로 묶는 식으로 기본키의 조건에 만족할때까지 컬럼들을 묶어주면서 복합키를 완성시키면 되는데 복잡하기에 기본키를 만드는게 중요하며 복합키 또한, 최대한 컬럼을 적게 묶는것이 중요하다.

 

'SQL' 카테고리의 다른 글

계층형 쿼리  (0) 2023.05.03
Entity란?  (0) 2023.04.14
<sql>, <include>  (0) 2022.10.18
LPAD() , RPAD()  (0) 2022.10.17
쌍 파이브(||)  (0) 2022.10.17
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.