2011-11-19 3 views
0

, 값의 삽입은 동일 할 수 있습니까? 내가 당신에게 예를 설명들 : 테이블의화합물 pk를 사용하는 경우 화합물 pk에 대한 쿼리

만들기 : 당신이 내 차 키를 가지고 볼 수 있듯이

Testno   Testpaper   Time 
12345   22    14-JUL-2011 
12345   23    15-JUL-2011 
12345   22    16-JUL-2011 

:

Create table test 
(
testno number(5) not null, 
testpaper varchar(2) not null, 
time date 
CONSTRAINT Pa_Pks PRIMARY KEY (testno, testpaper) 
) 

다음이 내가 삽입하고자하는 값이다 삽입하는 동안 같은 값. 내가 왜 그렇게하고 싶은지에 대한 이유는 동일한 testno와 testpaper가 다른 날짜에 발생할 수 있기 때문입니다.

동일한 값을 추가하고 기본 키로 레이블을 지정하려면 어떻게해야합니까? 어떤 해명

Create table TEST 
(
Testid number(1) not null, 
testno number(5) not null, 
testpaper varchar(2) not null, 
time date 
CONSTRAINT Pa_Pks PRIMARY KEY (Testid) 
) 

감사 :

이 그것을 할 수있는 표준 및 올바른 방법을해야합니다.

답변

2

아니, 기본 키는 고유해야합니다. 그러나 당신이 할 수있는 것은 테스트 시간을 키의 일부로 추가 할 수 있다는 것입니다. 또는 다른 열 이름을 ID로 사용할 수 있습니다.이 값은 자동 증가 키입니다. 따라서 기본 키는 ID (자동 증가)입니다.

AutoIncrement 키를 갖고 싶다면 oracle에서 순서와 트리거를 작성해야합니다. 시퀀스는 단순히 일련의 숫자입니다. 방아쇠의 목적은 새로운 행이 삽입 될 때마다 번호를 증가시켜 열 ID에 저장하는 것입니다. 그리고 Number의 크기를 늘릴 수도 있습니다. 숫자 (1)은 기본 키의 크기가 충분하지 않을 수 있습니다 (Oracle에 자동 증가 ID가있는 경우) 또는 단순 키를 기본 키에 추가 할 수 있습니다.

표준은 요구 사항에 따라 다릅니다. 두 접근법을 모두 따른다.

+0

. 기본 키로 식별 할 수있는 방법이 있습니까?하지만 동시에 같은 값을 삽입 하시겠습니까? 그게 내가 물어보고 싶은거야, – JLearner

+0

@ user976050 : ** NO ** - 기본 키 **는 정의에 따라 유일해야하므로 ** 중복 값을 가질 수 없습니다 .... –

+0

@ user976050 답변 됨 편집 됨 가능한 옵션으로 – Zohaib

0

time이 Null 인 경우 PRIMARY KEY의 일부를 구성 할 수 없지만 E UNIQUE 제약 조건의 일부일 수 있습니다. 키는 키이며 '기본'키를 지정하는 것은 임의적이며 필수는 아닙니다.

대리 키로 Testid을 추가하는 것은 자연 키가있는 경우에만 작동합니다. 따라서 : 만

이든 자연 키

Create table TEST 
(
testno number(5) not null, 
testpaper varchar(2) not null, 
time date, 
CONSTRAINT Pa_Uqs UNIQUE (testno, testpaper, time) 
); 

또는 자연 키 플러스 대용 키 : 내가 아는

Create table TEST 
(
Testid number(1) not null, 
testno number(5) not null, 
testpaper varchar(2) not null, 
time date, 
CONSTRAINT Pa_Pks PRIMARY KEY (Testid), 
CONSTRAINT Pa_Uqs UNIQUE (testno, testpaper, time) 
); 
관련 문제