기본키(Primary Key,PK)는 주 키 또는 프라이머리 키라고 하며, 후보키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없으며, 후보키의 성질을 갖는다. 즉, 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키이다. 또한, Null 값을 가질 수 없기 때문에 튜플에서 기본 키로 설정된 속성에 Null 값이 있어서는 안 된다.
[1]
릴레이션 스키마를 표현할 때 기본키는 속성아래 밑줄을 그어 표시한다.
개요
키(key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 애트리뷰트를 말한다. 키의 종류로는 기본키(Priamry),후보키(Candidate Key),대체키(Alternate Key),수퍼키(Super Key),외래키(Foreign Key)가 있다. 그 중 기본키는 후보키 중에서 선택한 주키(Main Key)로 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다. 속성값으로는 널(Null)값을 가질 수 없으며 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.
[2]
특징
기본키의 속성은 항상 고유한 값을 가져야 하며, 테이블당 하나만 만들 수 있다. 기본키의 속성으로 널(Null)값은 올 수 없으며, 속성 값이 변경될 가능성이 높은 속성은 기본키로 선정하지 않는게 좋다. 가능하면 작은 정수 값이나 짧은 문자열을 가지는 속성을 기본키로 선정하는게 좋은데 많은 데이터 중 빠르게 검색하기 위함이다. 또한, 복합 기본키는 피하는 것이 좋으며 기본키가 없는 테이블이 규칙에 어긋나는 것은 아니지만 모든 테이블에 기본키를 두는 것이 좋다. 테이블에 기본키가 없으면 반복적이고 일관성이 없는 데이터들이 쌓여 자신이 원하는 데이터를 추출하기 위해 명령을 내렸을 때 이를 수행하는 속도가 느릴 수 있고 다양한 문제를 일을킬 가능성이 있기 때문이다.
[3]
- 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
기본키는 튜플을 식별할 뿐만 아니라 릴레이션에서 원하는 튜플을 찾기 위한 기본 접근 방법을 제공하는 역할을 한다. 그러므로 기본키가 널 값인 튜플은 다른 튜플들과 구별하여 접근하기 어렵기때문에 이런 가능성이 있는 키는 기본키로 선택하지 않는 것이 좋다.
[고려사항]을 보면 고객 릴레이션에 존재하는 (고객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;
);
각주
- ↑ , 〈기본키〉, 《[database] 키의 개념 및 종류 - 슈퍼키, 후보키, 기본키, 대체키, 외래키》, 2020-01-09
- ↑ , 〈기본키 개요〉, 《[DB기초] 여러가지 키(기본키,후보키,외래키등)의 종류와 개념》, 2018-08-14
- ↑ , 〈기본키 특징〉, 《[데이터베이스]릴레이션 키 개념&종류&특징》, 2019-02-10
- ↑ , 〈기본키 고려사항〉, 《기본키》
참고자료
- [database] 키의 개념 및 종류 - 슈퍼키, 후보키, 기본키, 대체키, 외래키〈기본키〉, 2020-01-09《Tistory - moonibot》
- [데이터베이스]릴레이션 키 개념&종류&특징〈기본키 특징〉, 2019-02-10《Tistory - 양햄찌가 만드는 세상》
- [DB기초] 여러가지 키(기본키,후보키,외래키등)의 종류와 개념〈기본키 개요〉, 2018-08-14《Tistory - 코딩팩토리》
- 기본키〈기본키 고려사항〉, 《Naver 지식백과》
같이 보기
이 기본키 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
개발 : 프로그래밍 □■⊕, 소프트웨어, 데이터, 솔루션, 보안, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
프로그래밍 언어
|
ASP • C 언어 • C++ • C# • CSS • D 언어 • HTML • HTML5 • JSP • PHP • R • XHTML • XML • XSLT • 고(Go) • 고급언어 • 기계어 • 델파이 • 러스트 • 루비 • 루아 • 리액트 • 리퀴디티 • 무브 • 미켈슨 • 베이직 • 브이비스크립트 • 비주얼 C++ • 비주얼베이직(VB) • 비주얼베이직닷넷(VB.NET) • 솔리디티 • 스몰토크 • 스위프트 언어 • 스칼라 • 스크립트 언어 • 알골 • 어셈블리 • 언리얼스크립트 • 얼랭 • 에이잭스(Ajax) • 엠에프씨(MFC) • 오브젝티브-C • 오브젝트 파스칼 • 오카멜 • 웹어셈블리(WASM) • 이와즘(eWASM) • 자바 • 자바스크립트 • 저급언어 • 제이슨(JSON) • 제이쿼리(jQuery) • 카멜 • 코볼 • 코틀린 • 콜드퓨전 • 타입스크립트 • 파스칼 • 파워스크립트 • 파이썬 • 펄(Perl) • 포트란 • 프로씨(Pro-C) • 피엘에스큐엘(PL/SQL) • 피엘원(PL/I) • 하스켈
|
|
개발방법론
|
CBD 개발방법론 • EA • 구조적 개발방법론 • 객체지향 개발방법론 • 라이브러리 • 람다 아키텍처 • 모듈 • 모듈화 • 벤치마킹 • 소프트웨어 개발방법론 • 스크럼 • 스프린트 • 아키텍처 • 아키텍트 • 애자일 • 웹개발방법론 • 정보공학 개발방법론 • 컴포넌트 • 테일러링 • 템플릿 • 폭포수 모델 • 프로젝트 • 프로토타입 • 피드백
|
|
코딩
|
EUC-KR • UTF-8 • 값 • 글루웨어 • 노팔로우 링크 • 두팔로우 링크 • 디버깅 • 디코딩 • 마크업 • 버그 • 부트스트랩 • 세이브포인트 • 소스코드 • 시큐어코딩 • 아스키 • 액티브엑스 • 오픈소스 • 유니코드 • 인코딩 • 재컴파일 • 주석 • 컴파일 • 컴퓨터 프로그램 • 코드 • 코딩 • 태그 • 테스트 • 테이블 • 텍스트 • 파싱 • 퍼블리싱 • 퓨니코드 • 하드코딩 • 하이퍼링크 • 하이퍼텍스트
|
|
프로그래밍
|
C 명령어 • 객체 • 객체지향 • 객체지향 프로그래밍 • 거짓 • 관계연산자 • 기본형 변수 • 널 • 논리 • 논리연산 • 논리연산자 • 다중상속 • 다형성 • 대입 • 대입문 • 대입연산자 • 더블 • 도스 명령어 • 디폴트 • 레지스터변수 • 루프 • 리눅스 명령어 • 리턴 • 메모리 주소 • 메소드 • 멤버 • 명령문 • 명령어 • 무한루프 • 문자 • 문자열 • 바이트 • 반복문 • 배열 • 변수 • 분기 • 분기문 • 불린 • 브레이크 • 비교연산자 • 비트연산자 • 산술연산자 • 상속 • 상수 • 생성자 • 선언 • 선언문 • 설정자 • 속성 • 스위치 • 스태틱 • 시프트연산자 • 실행 • 실행문 • 어노테이션 • 에코 • 역참조 • 연산 • 연산문 • 연산자 • 오버로딩 • 오버라이딩 • 외부변수 • 윈도우 명령어 • 유닉스 명령어 • 인스턴스 • 인스트럭션 • 인클루드 • 인터페이스 • 임포트 • 입력 • 입력문 • 입출력 • 입출력문 • 자료형(데이터 타입) • 자바 명령어 • 자바 예약어 • 자바 컬렉션 • 전역변수 • 접근자 • 접근제어자 • 정보은닉 • 정수형 • 정적변수 • 제어 • 제어문 • 제어자 • 조건 • 조건문 • 조건연산자 • 주소 • 증감연산자 • 지역변수 • 참 • 참조 • 참조변수 • 초기화 • 추상메소드 • 추상클래스 • 추상화 • 출력 • 출력문 • 캡슐화 • 케이스 • 클래스 • 파라미터(매개변수) • 파이널 • 패키지 • 퍼블릭 • 포인터 • 프라이빗 • 프로텍티드 • 필드(멤버변수) • 함수 • 환경변수
|
|
명령어
|
abstract • array • boolean • break • byte • case • char • continue • default • double • do while • echo • elif • else • else if • false • final • float • for • gosub • goto • if • if else • import • include • int • join • long • long long • null • print • printf • println • private • protected • public • return • scanf • short • stdio.h • static • string • switch • temp • then • true • unsigned • void • while
|
|
디자인패턴
|
구조패턴 • 동시성패턴 • 동시실행패턴 • 모델-뷰-컨트롤러 패턴 • 상태패턴 • 생성패턴 • 싱글톤패턴 • 아키텍처패턴 • 전략패턴 • 커맨드패턴 • 행동패턴
|
|
프로그래밍 인물
|
귀도 반 로썸 • 그레이스 머레이 호퍼 • 니클라우스 비르트 • 댄 브릭클린 • 더그 커팅 • 데니스 리치 • 리누스 토르발스 • 리처드 그린블라트 • 마거릿 해밀턴 • 마크 앤드리슨 • 빈트 서프 • 빌 게이츠 • 빌 조이 • 스티브 잡스 • 에이다 러브레이스 • 제임스 고슬링 • 척 벤턴 • 켄 톰슨 • 팀 패터슨
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|