8

SQL Developer で SQL スクリプトをエクスポートする場合、複数のオプションが利用可能ですが、どちらの方法でも、UNIQUE INDEXこのような主キーを生成する必要があります

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

PRIMARY KEY同じテーブルと同じ列に追加します

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

問題は、冗長性のように見えるかどうかです。列に主キーを作成すると、デフォルトでその列にも一意のインデックスが作成されるはずだと思いましたか? では、なぜ最初のコマンドが必要なのでしょうか?

そして、これはデータの冗長性を引き起こす可能性がありますか?

私は Oracle 11g を使用しているので、上記のように表示される理由についてアイデアを共有してください。

前もって感謝します。

4

1 に答える 1

6

冗長性はありません-または少しだけ:)

2 番目のコマンドは、存在する場合は利用可能なインデックスを使用します。それ以外の場合 (最初の DDL が存在しない場合) は、インデックスを作成します。

2 つのコマンドへの分割は、インデックスに適切な名前を付け、それを保持したい場合に便利です。

更新: Thomas Haratyk が示したリンクは必読です

UPDATE2 : a_horse_with_no_name は正しく、次のような単一のステートメントで実行できます。

alter table TRANSACTION
add CONSTRAINT pk_test PRIMARY KEY (id);

そのため、名前が保持され (sysblalbla オブジェクト名は作成されません)、「USING INDEX」キーワードを使用すると、ストレージ属性などのインデックス属性を指定できます。

ただし、これら 2 つのステートメントで問題は発生しません。インデックスが作成されるだけです。

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

于 2012-11-05T15:34:58.153 に答える