2016-09-13 7 views
1

私はOracle 12cを使用しており、IDENTITYの列はGENERATED ALWAYSと設定されています。Oracle ID列を持つ主キーが必要ですか?

CREATE TABLE Customers 
(
    id   NUMBER GENERATED ALWAYS AS IDENTITY, 
    customerName VARCHAR2(30) NULL, 

    CONSTRAINT "CUSTOMER_ID_PK" PRIMARY KEY ("ID") 
); 

IDはシーケンスから自動的に取得されるため、常に一意になります。

ID列にはPKが必要ですか?はいの場合、パフォーマンスに影響しますか? INSERTでインデックスのパフォーマンスが向上しても同じ結果が得られますか?

答えて

1

はありません、あなたは必ずしも主キー必要はありませんが、は常に可能な限りあなたのデータに関する多くの情報として、オプティマイザを提供する必要があります - 可能な限り一意性制約を含みます。

サロゲートキー(IDなど)の場合は、参照制約の最も有望な候補であるため、主キーとして宣言することはほとんど常に適切です。

あなたIDに通常のインデックスを使用することができ、およびルックアップのパフォーマンスは、データ量に応じて、匹敵する - 代わりにユニークインデックスの非一意のインデックスを使用するには、この場合、実質的には良い理由はありません - とにかくインデックスを必要とする制約を避けるためにこの場合は正当な理由はありません。

2

IDの列に一意性制約(例外はほとんどありません)を設定する必要があります。値が提供される方法に関係なく、実際には一意である必要がありますアプリケーションコードまたはIDENTITY列を使用してください。

+0

実際には、「GENERATED ALWAYS IDENTITY」列には挿入できません。ただし、一意制約に関するあなたの点は正しいです。 –

+0

@jefryあなたは私の言葉を得ていませんでした。 pkカラムが同一である必要はなく、キー値を自分自身に挿入することができます – Rahul

+0

問題はありません。私はあなたの意味をより明確にするために編集しました。 –

関連する問題