2012-11-05 16 views
8
輸出SQLスクリプトは、SQL Developerで利用可能な複数のオプションがありますが、いずれかの方法は、この

主キーと一意のインデックス - SQL Developerによって生成されたSQLスクリプト

CREATE UNIQUE INDEX "SYS_C0018099" ON "TRANSACTION" ("ID") 

のように主キーにUNIQUE INDEXを生成するために、そこに持っている

それは、冗長性の一種のように見えるんので、質問がされ

ALTER TABLE "TRANSACTION" ADD PRIMARY KEY ("ID") 

同じテーブルと同じ列にPRIMARY KEYを追加しますか?私は、列にプライマリキーを作成すると、デフォルトでその列に一意のインデックスを作成する必要がありますか?なぜ最初のコマンドが必要なのですか?

これはデータの重複を引き起こす可能性がありますか?

私はOracle 11gを使用していますので、上記のように表示される理由についてご意見をお寄せください。

ありがとうございます。あるいは少しだけ:)

存在する場合、2番目のコマンドは、使用可能なインデックスを使用します -

+2

これはあなたを助けるかもしれませんhttp://viralpatel.net/blogs/understanding-primary-keypk-constraint-in-oracle/ – jazzytomato

+0

偉大な記事;) – Dreamer

答えて

6

には冗長性がありません。それ以外の場合(最初のDDLが存在しない場合)、索引が作成されます。

2つのコマンドに分割すると、インデックスに適切な名前を付けておきたい場合に便利です。

UPDATEhttp://viralpatel.net/blogs/understanding-primary-keypk-constraint-in-oracle/

をアップデート2:トーマスHaratykで示されたリンクは、私は本当にそれのように、読まなければならないです

:a_horse_with_no_nameが正しいと、それはのような単一のステートメントで行うことができます
alter table TRANSACTION 
add CONSTRAINT pk_test PRIMARY KEY (id); 

名前を保持します(sysblalblaオブジェクト名を作成しません)。また、 'USING INDEX'キーワードを使用すると、インデックス属性(例:storage atributes)を指定できます。

しかし、この2つのステートメントには問題はなく、インデックスのみが作成されます。

おそらく、SQL Developerはオブジェクトごとにddlを取得する方が好きであり、その方が良い場合があるかもしれません。

+0

それはしかし、ただ一つのステートメントで行うことができます。 –

+0

インテルに感謝します。 @a_horse_with_no_nameあなたは、2つの '索引名で'の正式な組み合わせとして1つのステートメントを与えてください。つまり、主キーを作成するときに 'ALTER TABLE'コマンドでインデックス名を指定することはできますか?ありがとう – Dreamer

+1

@Dreamer: 'alter table foo add制約pk_foo主キー(id)'は、 'PK_FOO'という名前の制約と同じ名前のインデックスを作成します。 'alter table foo add constraint pk_fooインデックスを使ってプライマリ・キー(id)を作成する(foo(id)にインデックスpk_index_for_fooを作成する);' –

関連する問題