2011-08-28 67 views
9

私はOracleデータベースの設計を分析しており、同じフィールドで一意のキーと主キーの両方を確認することに困惑しています。これらのユニークプライマリキーのペアは、すべてのテーブルで一貫して作成されます。私はこれをする理由はないと思う。同じフィールドでプライマリキーとユニークキーの両方を使用する理由はありますか?

とにかく私が主キーを持っているのであれば、同じフィールドに追加の一意のキーを作成するのがよいでしょうか?

+1

プライマリキーは定義上ユニークなので、別のユニーク制約/インデックスを追加する理由は見当たりません – Phil

答えて

1

いいえ、それを一意にする理由はありません。 PKとして列を設定すると、次のことが確認されます。

  1. INSERTまたはUPDATEでその列にNULLは受け入れられません。
  2. その列のテーブル全体の値は常にUNIQUEです。

だから、PKだけで十分です。 PK列にはUNIQUE索引が存在するため、その列にのみ他の索引を追加する必要はありません。なぜなら、その列のみが影響を受けるたびに照会がPK索引を使用するからです。

私は([S]同じ列にPKおよび一意性制約)、それは不可能だと考えてい
1

...

あなたは主キーやユニークキーの両方と同じ列または列の組み合わせを指定することはできません。 (hereから、 "プライマリキー制約上制限")

。ではない?

1

同じ順序で同じフィールド・セットに複数のUNIQUEおよびPRIMARY KEYの制約を作成することはできません。これは、ORA-02261で失敗します。

コンポジットキーを使用している場合は、列のセットにPRIMARY KEYを1つの順序(PRIMARY KEY (a, b))で作成し、一意の制約を別の順序(UNIQUE (b, a))で作成できます。

これは解析して実行しますが、単一のインデックスを使用して両方の制約を警報して意味をなさないようにします。

テーブルスクリプトを投稿してください。

1

ちょっとした理論的背景ここではテーブルをモデリングするときに、のキーのセットを特定します。これらのキーは論理的には同等ですが、実用的な目的のためにそれらのキーの1つを選択し、それを「プライマリ」と呼びますが、残りは「代替」になります。

( "代替キー" が "UNIQUE制約" と呼ばれながら、DDL SQL、主キーでは、 "PRIMARY KEY" と呼ばれている。

ので、その光の中で、あなたの質問は同等です: "2つの同一のキーを持つ良い理由がある"と答えは"いいえ"です。言われていること

、あなたは、キー(すべてではない、いくつかのフィールドを共有するが、すなわちキー)を重複しているかもしれませんが、これは、通常は悪いデザインの兆候である...そして答えは:「おそらくありません」


OTOH、「ユニークキー」によるならば、あなたは実際には「ユニークインデックス」を意味し、はい、あなたはそれらの両方が必要です。

インデックスは論理的な制約ではありません。PRIMARY KEYなどの論理的な制約をうまく果たすことができます(クエリでは、別のトピックです)。

4

多対多を解決するテーブルでは、2つの部分キー(Quassnoiで示されるように)を持つのが一般的です。どちらの親を通してもアクセスをサポートするインデックスが必要になる可能性が非常に高いです。

たとえば、PERSON、ADDRESSおよびPERSON_ADDRESS表がある場合、PERSON_ADDRESS表に(PERSON_ID、ADDRESS_ID)およびサポート索引の主キーが含まれている可能性があります。また、(ADDRESS_ID、PERSON_ID)に別の索引を付けることもあります。これは、ユニークな索引になる可能性があります(これは、フィールドの固有の組み合わせなので)。

DBAには、プライマリ・キー・フィールドのUNIQUE索引で始まり、次にPRIMARY KEY制約を作成する表を生成する特定の方法があります。それはあなたが提案する方法でいくつかのGUIツールで表示されるかもしれません。

関連する問題