ORA-02260: 테이블에는 하나의 기본 키만 가질 수 있습니다 오류는 문장에서 설명하듯이, 테이블에 하나를 초과하는 기본 키를 설정하려고 시도하는 경우에 발생합니다. 기본키는 오직 하나만 가능하므로, 테이블이 가지고 있는 기본키를 다시 확인하거나, 대체키를 기본키로 설정하기 위한 검토를 해주세요. 기본키를 변경하려면 기존의 기본키를 정리해야 합니다.
해당 오류에 대한 해결 방법은 별로 설명할 게 없어서, 이번 시간에는 테이블이 무엇이고, 기본키가 무엇인지에 대해 알아보도록 합시다.
테이블이 무엇인가요?
테이블은 엑셀을 떠올리면 쉽습니다. 테이블은 세로와 가로를 사용하여 2차원으로 데이터를 표시하는 방법입니다. 보통 세로에는 데이터의 속성(어트리뷰트)을 표현하며, 가로에는 각 자료(튜플)를 표현합니다. 오라클 데이터베이스와 같은 관계형 데이터베이스(RDBMS)에서는 어트리뷰트를 컬럼이라고 하며, 튜플을 로우라고 합니다.
다음은 직원 테이블 EMP의 모든 데이터를 SELECT * FROM EMP 명령어로 조회해 보는 예제입니다.
조회 결과는 훑어만 보시고, 아래에 내용이 있으니 밑으로 내려가시면 됩니다.
SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 91/01/05 2850 30
7782 CLARK MANAGER 7839 99/09/06 2450 10
7566 JONES MANAGER 7839 01/02/04 2975 20
7788 SCOTT ANALYST 7566 03/06/17 3000 20
7902 FORD ANALYST 7566 81/03/12 3000 20
7369 SMITH CLERK 7902 07/12/01 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7844 TURNER SALESMAN 7698 81/08/09 1500 0 30
7876 ADAMS CLERK 7788 87/05/23 1100 20
7900 JAMES CLERK 7698 81/03/12 950 30
7934 MILLER CLERK 7782 03/01/23 1300 10
7839 KING PRESIDENT 96/11/17 5000 10
14 rows selected.
컬럼
세로에는 각각 EMPNO(직원번호), ENAME(직원이름), JOB(직업), MGR(매니저), HIREDATE(고용일), SAL(급여), COMM(커미션), DEPTNO(부서번호)가 있는 것을 확인할 수 있습니다.
로우
가로에는 각 속성 집합의 개체를 표현하고 있습니다.
테이블
예를 들면 첫 번째 로우를 통해 해당 테이블에는 직원번호가 7698이고, 이름이 BLAKE이며, 고용일이 91년 1월 5일인 직원이 있다는 것을 알 수 있습니다.
기본 키가 무엇인가요?
기본키는 하나의 테이블(릴레이션)에서 로우(튜플)를 유일하게 식별할 수 있는 컬럼(어트리뷰트) 집합을 뜻합니다. 관계형 데이터베이스는 로우를 기본키라는 속성을 통해 테이블 내의 관계를 정의하고, 각 테이블의 공통된 컬럼을 통해 테이블 간의 연관성을 구현합니다. 기본키는 테이블의 관리와 연결을 가능케 하여 관계를 만드는 역할을 한다고 할 수 있습니다.
예를 들면, 기본키가 없는 직원 테이블(EMP2)이 있다고 해봅시다. 해당 테이블에는 임의로 동일한 데이터를 5개 입력해 놓았습니다.
SELECT * FROM EMP2;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
7839 KING PRESIDENT 96/11/17 5000 10
7839 KING PRESIDENT 96/11/17 5000 10
7839 KING PRESIDENT 96/11/17 5000 10
7839 KING PRESIDENT 96/11/17 5000 10
7839 KING PRESIDENT 96/11/17 5000 10
직원번호부터 시작하여 모든 속성이 동일한 여러 개의 데이터는 테이블 내부뿐만 아니라 외부적으로도 어떠한 관계도 적용이 불가할 것이라는 느낌이 오시나요? 그만큼 기본키는 테이블의 정의에 있어서 매우 중요한 역할을 합니다.
기본키와 관련한 기본적인 용어는 슈퍼키, 후보키, 기본키, 대체키가 있습니다. 기본키의 정의이자 핵심은 고유성, 즉 유일성입니다.
슈퍼키
슈퍼키(Super Key)는 가장 넓은 개념의 키이며, 로우를 고유히 식별할 수 있는 함수 종속적 속성 집합입니다.
후보키
후보키(Candidate Key)는 슈퍼키 중에서 최소성을 만족하는 속성 집합이며 기본키의 후보가 되는 키입니다. 모든 후보키는 슈퍼키의 일부입니다.
기본키
기본키(Priamry Key)는 주키, PK라고 하며, 후보키 중에서 유일성을 만족하는 속성 집합입니다. 그리하여 슈퍼키 중 최소성과 유일성을 모두 만족하는 키라고 할 수 있습니다. 기본키는 후보키의 일부이며, 또한 슈퍼키의 일부입니다.
대체키
대체키(Alternate Key)는 보조키라고도 하며, 후보키 중 기본키로 채택하지 않은 속성 집합입니다. 후보키 중 하나이므로 최소성이 보장되기에 인덱스의 고려대상이 될 수 있는 키입니다.
기본키 관계
기본키 + 대체키 = 후보키
후보키 <= 슈퍼키
ORA-02260: 테이블에는 하나의 기본 키만 가질 수 있습니다
이것으로 왜 테이블은 하나의 기본 키만 가질 수 있는지에 대해 알아보았습니다~