"기본키"의 두 판 사이의 차이
(→고려사항 , 〈기본키 고려사항〉, 《기본키》) |
|||
(사용자 2명의 중간 판 11개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''기본키'''(Primary Key | + | [[파일:기본키 표시.png|썸네일|300픽셀|기본키 테이블 표시]] |
− | <ref> , 〈[https://moonibot.tistory.com/61 기본키]〉, 《[database] 키의 개념 및 종류 - 슈퍼키, 후보키, 기본키, 대체키, 외래키》, 2020-01-09</ref> | + | |
− | 릴레이션 스키마를 표현할 때 기본키는 | + | '''기본키'''<!--기본 키-->(Primary Key; PK)는 '''주 키'''<!--주키--> 또는 '''프라이머리 키'''<!--프라이머리키-->라고 하며, 후보키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없으며, 후보키의 성질을 갖는다. 즉, 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키이다. 영어 약자로 '''PK'''(피케이)라고 한다. 기본키는 Null 값을 가질 수 없기 때문에 [[튜플]]에서 기본 키로 설정된 속성에 Null 값이 있어서는 안 된다.<ref> , 〈[https://moonibot.tistory.com/61 기본키]〉, 《[database] 키의 개념 및 종류 - 슈퍼키, 후보키, 기본키, 대체키, 외래키》, 2020-01-09</ref> 릴레이션 스키마를 표현할 때 기본키는 속성 아래 밑줄을 그어 표시한다. |
− | |||
==개요== | ==개요== | ||
− | 키(key)는 | + | 키(key)는 [[데이터베이스]]에서 조건에 만족하는 [[튜플]]을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 [[속성]]을 말한다. 키의 종류로는 [[기본키]](Priamry),[[후보키]](Candidate Key),[[대체키]](Alternate Key),[[수퍼키]](Super Key),[[외래키]](Foreign Key)가 있다. 그 중 기본키는 후보키 중에서 선택한 주키(Main Key)로 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다. 속성값으로는 널(Null)값을 가질 수 없으며 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.<ref>〈[https://coding-factory.tistory.com/220 기본키 개요]〉, 《[DB기초] 여러가지 키([[기본키]], [[후보키]], [[외래키]] 등)의 종류와 개념》, 2018-08-14</ref> |
− | <ref> | ||
[[파일:키구성.png|500픽셀|섬네일|가운데|키 구성도]] | [[파일:키구성.png|500픽셀|섬네일|가운데|키 구성도]] | ||
13번째 줄: | 11번째 줄: | ||
기본키의 속성은 항상 고유한 값을 가져야 하며, 테이블당 하나만 만들 수 있다. 기본키의 속성으로 널(Null)값은 올 수 없으며, 속성 값이 변경될 가능성이 높은 속성은 기본키로 선정하지 않는게 좋다. 가능하면 작은 정수 값이나 짧은 문자열을 가지는 속성을 기본키로 선정하는게 좋은데 많은 데이터 중 빠르게 검색하기 위함이다. 또한, 복합 기본키는 피하는 것이 좋으며 기본키가 없는 테이블이 규칙에 어긋나는 것은 아니지만 모든 테이블에 기본키를 두는 것이 좋다. 테이블에 기본키가 없으면 반복적이고 일관성이 없는 데이터들이 쌓여 자신이 원하는 데이터를 추출하기 위해 명령을 내렸을 때 이를 수행하는 속도가 느릴 수 있고 다양한 문제를 일을킬 가능성이 있기 때문이다. | 기본키의 속성은 항상 고유한 값을 가져야 하며, 테이블당 하나만 만들 수 있다. 기본키의 속성으로 널(Null)값은 올 수 없으며, 속성 값이 변경될 가능성이 높은 속성은 기본키로 선정하지 않는게 좋다. 가능하면 작은 정수 값이나 짧은 문자열을 가지는 속성을 기본키로 선정하는게 좋은데 많은 데이터 중 빠르게 검색하기 위함이다. 또한, 복합 기본키는 피하는 것이 좋으며 기본키가 없는 테이블이 규칙에 어긋나는 것은 아니지만 모든 테이블에 기본키를 두는 것이 좋다. 테이블에 기본키가 없으면 반복적이고 일관성이 없는 데이터들이 쌓여 자신이 원하는 데이터를 추출하기 위해 명령을 내렸을 때 이를 수행하는 속도가 느릴 수 있고 다양한 문제를 일을킬 가능성이 있기 때문이다. | ||
<ref> , 〈[https://jhnyang.tistory.com/71 기본키 특징]〉, 《[데이터베이스]릴레이션 키 개념&종류&특징》, 2019-02-10</ref> | <ref> , 〈[https://jhnyang.tistory.com/71 기본키 특징]〉, 《[데이터베이스]릴레이션 키 개념&종류&특징》, 2019-02-10</ref> | ||
+ | |||
+ | ===고려사항<ref> , 〈[https://terms.naver.com/entry.nhn?docId=3431150&cid=58430&categoryId=58430&expCategoryId=58430 기본키 고려사항]〉, 《기본키》</ref>=== | ||
+ | [[파일:기본키 고려사항.png|500픽셀|섬네일|가운데|고려사항]] | ||
+ | * 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다. | ||
+ | 기본키는 튜플을 식별할 뿐만 아니라 릴레이션에서 원하는 튜플을 찾기 위한 기본 접근 방법을 제공하는 역할을 한다. 그러므로 기본키가 널 값인 튜플은 다른 튜플들과 구별하여 접근하기 어렵기때문에 이런 가능성이 있는 키는 기본키로 선택하지 않는 것이 좋다. | ||
+ | [고려사항]을 보면 고객 릴레이션에 존재하는 (고객ID)와 (고객이름,주소)라는 두 후보키 중 무엇을 선택하는 것이 좋을까? 인터넷 홈페이지에 고객으로 가입할 때를 보면 고객ID는 꼭 입력해야 하지만 고객이름이나 주소는 입력하지 않아도 되는 경우가 많다. 이런 경우에는 고객이름이나 주소는 널(Null)값을 가질 수 있으므로 (고객ID)를 기본키로 선택하는 것이 좋다. | ||
+ | |||
+ | * 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다. | ||
+ | 기본키는 다른 튜플과 구별되는 값을 가지고 널(Null)값은 허용하지 않으므로 이를 확인하는 작업이 필요하다. 그런데 값이 자주 변경되는 속성으로 구성된 후보키를 기본키로 선택하게 되면 속성 값이 바뀔 때마다 적합 여부를 판단해야 하므로 번거롭다. 그러므로 값이 자주 변경되지 않는 속성으로 구성된 후보키를 기본키로 선택하는 것이 좋다. [고려사항]의 고객 릴레이션에 존재하는 (고객ID)와 (고객이름,주소)라는 두 후보키를 보자. 보통 주소는 고객ID와 이름보다 변경될 가능성이 높다. 그러므로 주소 속성이 포함되지 않는 (고객ID) 후보키를 기본키로 선택하는 것이 좋다. | ||
+ | |||
+ | *단순한 후보키를 기본키로 선택한다. | ||
+ | 단순한 후보키는 자리수가 적은 정수나 단순 문자열인 속성으로 구성되거나, 구성하는 속성의 개수가 적은 후보키이다. 데이터베이스를 이용하는 일반 사용자뿐만 아니라 데이터베이스를 실제로 처리하는 컴퓨터 시스템도 단순 값 처리를 선호한다. [고려사항]의 고객 릴레이션에 존재하는 (고객ID)와 (고객이름,주소)후보키 중 속성 두 개로 구성된 후보키보다는 하나로 구성된 후보키가 이해하기도 쉽고 처리하기도 쉬울 것이다. 그러므로 (고객ID) 후보키를 기본키로 선택하는 것이 좋다. | ||
+ | |||
+ | ==활용== | ||
+ | 테이블 생성 시 기본키 삽입방법 | ||
+ | CREATE TABLE Member ( | ||
+ | ID int NOT NULL PRIMARY KEY, | ||
+ | Address varchar(255), | ||
+ | PNumber int, | ||
+ | Age int; | ||
+ | ); | ||
{{각주}} | {{각주}} | ||
==참고자료== | ==참고자료== | ||
− | * [ | + | * 〈[https://terms.naver.com/entry.naver?docId=3431150&cid=58430&categoryId=58430 데이터베이스 개론 - 기본키]〉, 《네이버 지식백과》 |
− | * | + | * moonibot, 〈[https://moonibot.tistory.com/61 (database) 키의 개념 및 종류 - 슈퍼키, 후보키, 기본키, 대체키, 외래키]〉, 《티스토리》, 2020-01-09 |
− | * | + | * IT 양햄찌(jhnyang), 〈[https://jhnyang.tistory.com/71 (데이터베이스)릴레이션 키 개념& 종류(기본키, 슈퍼키, 대체키, 복합키, 후보기)&특징, 유일성 최소성이란?]〉, 《티스토리》, 2019-02-10 |
+ | * 코딩팩토리, 〈[https://coding-factory.tistory.com/220 (DB기초) 여러가지 키(기본키,후보키,외래키등)의 종류와 개념]〉, 《티스토리》, 2018-08-14 | ||
==같이 보기== | ==같이 보기== | ||
− | *[[데이터베이스]] | + | * [[키 (데이터베이스)|키]] |
− | *[[ | + | * [[대리키]] |
− | *[[ | + | * [[수퍼키]] |
− | *[[ | + | * [[외래키]] |
− | *[[ | + | * [[후보키]] |
− | *[[ | + | * [[릴레이션]] |
− | {{ | + | {{데이터|검토 필요}} |
2022년 6월 22일 (수) 16:56 기준 최신판
기본키(Primary Key; PK)는 주 키 또는 프라이머리 키라고 하며, 후보키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없으며, 후보키의 성질을 갖는다. 즉, 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키이다. 영어 약자로 PK(피케이)라고 한다. 기본키는 Null 값을 가질 수 없기 때문에 튜플에서 기본 키로 설정된 속성에 Null 값이 있어서는 안 된다.[1] 릴레이션 스키마를 표현할 때 기본키는 속성 아래 밑줄을 그어 표시한다.
개요[편집]
키(key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 속성을 말한다. 키의 종류로는 기본키(Priamry),후보키(Candidate Key),대체키(Alternate Key),수퍼키(Super Key),외래키(Foreign Key)가 있다. 그 중 기본키는 후보키 중에서 선택한 주키(Main Key)로 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다. 속성값으로는 널(Null)값을 가질 수 없으며 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.[2]
특징[편집]
기본키의 속성은 항상 고유한 값을 가져야 하며, 테이블당 하나만 만들 수 있다. 기본키의 속성으로 널(Null)값은 올 수 없으며, 속성 값이 변경될 가능성이 높은 속성은 기본키로 선정하지 않는게 좋다. 가능하면 작은 정수 값이나 짧은 문자열을 가지는 속성을 기본키로 선정하는게 좋은데 많은 데이터 중 빠르게 검색하기 위함이다. 또한, 복합 기본키는 피하는 것이 좋으며 기본키가 없는 테이블이 규칙에 어긋나는 것은 아니지만 모든 테이블에 기본키를 두는 것이 좋다. 테이블에 기본키가 없으면 반복적이고 일관성이 없는 데이터들이 쌓여 자신이 원하는 데이터를 추출하기 위해 명령을 내렸을 때 이를 수행하는 속도가 느릴 수 있고 다양한 문제를 일을킬 가능성이 있기 때문이다. [3]
고려사항[4][편집]
- 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
기본키는 튜플을 식별할 뿐만 아니라 릴레이션에서 원하는 튜플을 찾기 위한 기본 접근 방법을 제공하는 역할을 한다. 그러므로 기본키가 널 값인 튜플은 다른 튜플들과 구별하여 접근하기 어렵기때문에 이런 가능성이 있는 키는 기본키로 선택하지 않는 것이 좋다. [고려사항]을 보면 고객 릴레이션에 존재하는 (고객ID)와 (고객이름,주소)라는 두 후보키 중 무엇을 선택하는 것이 좋을까? 인터넷 홈페이지에 고객으로 가입할 때를 보면 고객ID는 꼭 입력해야 하지만 고객이름이나 주소는 입력하지 않아도 되는 경우가 많다. 이런 경우에는 고객이름이나 주소는 널(Null)값을 가질 수 있으므로 (고객ID)를 기본키로 선택하는 것이 좋다.
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
기본키는 다른 튜플과 구별되는 값을 가지고 널(Null)값은 허용하지 않으므로 이를 확인하는 작업이 필요하다. 그런데 값이 자주 변경되는 속성으로 구성된 후보키를 기본키로 선택하게 되면 속성 값이 바뀔 때마다 적합 여부를 판단해야 하므로 번거롭다. 그러므로 값이 자주 변경되지 않는 속성으로 구성된 후보키를 기본키로 선택하는 것이 좋다. [고려사항]의 고객 릴레이션에 존재하는 (고객ID)와 (고객이름,주소)라는 두 후보키를 보자. 보통 주소는 고객ID와 이름보다 변경될 가능성이 높다. 그러므로 주소 속성이 포함되지 않는 (고객ID) 후보키를 기본키로 선택하는 것이 좋다.
- 단순한 후보키를 기본키로 선택한다.
단순한 후보키는 자리수가 적은 정수나 단순 문자열인 속성으로 구성되거나, 구성하는 속성의 개수가 적은 후보키이다. 데이터베이스를 이용하는 일반 사용자뿐만 아니라 데이터베이스를 실제로 처리하는 컴퓨터 시스템도 단순 값 처리를 선호한다. [고려사항]의 고객 릴레이션에 존재하는 (고객ID)와 (고객이름,주소)후보키 중 속성 두 개로 구성된 후보키보다는 하나로 구성된 후보키가 이해하기도 쉽고 처리하기도 쉬울 것이다. 그러므로 (고객ID) 후보키를 기본키로 선택하는 것이 좋다.
활용[편집]
테이블 생성 시 기본키 삽입방법
CREATE TABLE Member ( ID int NOT NULL PRIMARY KEY, Address varchar(255), PNumber int, Age int; );
각주[편집]
참고자료[편집]
- 〈데이터베이스 개론 - 기본키〉, 《네이버 지식백과》
- moonibot, 〈(database) 키의 개념 및 종류 - 슈퍼키, 후보키, 기본키, 대체키, 외래키〉, 《티스토리》, 2020-01-09
- IT 양햄찌(jhnyang), 〈(데이터베이스)릴레이션 키 개념& 종류(기본키, 슈퍼키, 대체키, 복합키, 후보기)&특징, 유일성 최소성이란?〉, 《티스토리》, 2019-02-10
- 코딩팩토리, 〈(DB기초) 여러가지 키(기본키,후보키,외래키등)의 종류와 개념〉, 《티스토리》, 2018-08-14
같이 보기[편집]