2011-11-19 21 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 Keyを使用する場合は、oracleでシーケンスとトリガーも作成する必要があります。シーケンスは単なる一連の番号です。トリガーの目的は、新しい行が挿入されるたびに番号を増やして列idに格納することです。また、Numberのサイズを増やしたい場合もあります。数字(1)はプライマリ・キーのサイズが十分ではないかもしれません(Oracleに自動増分IDを持たせたい場合)またはシンプル・キーを使用して、主キーにTimeを追加できます。

標準は要件によって異なります。両方のアプローチに従う。

+0

私が知っています。それを主キーとして識別する方法はありますか?同時に同じ値を挿入する方法はありますか? – JLearner

+0

@ user976050:** NO ** - プライマリキー**は定義上一意である必要があります。**ので、**重複する値はありません.... –

+0

@ user976050 answer edited可能なオプションは – Zohaib

0

timeがヌル可能な場合は、PRIMARY KEYの一部を構成することはできませんが、これは制約の一部である可能性があります。キーはキーであり、キーを「プライマリ」として指定することは任意であり、必須ではないことに注意してください。

代理キーとしてTestidを追加することは、最初に自然なキーがある場合にのみ機能します。したがって:

だけか自然キー:

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

OR自然キープラス代理キー:

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) 
); 
関連する問題