2011-01-29 97 views
93

命名規則は重要であり、主キーと外部キーは一般的に使用されている明示的な規則(それぞれPK_TableFK_Table_ReferencedTable)を持っています。インデックスの名前はIX_Table_Columnでもかなり標準です。ユニーク制約の命名規則

UNIQUE制約はどうですか?この制約には一般に認められている命名規則がありますか?私はUK_TableName_ColumnUQ_TableName_Column、誰かが推薦するAX_TableName_Columnを見た - どこから来たのかわかりません。

私は通常UQを使用しましたが、特に気に入らず、UKの支持者に対して使用することを拒否することを楽しむことはありません。

私は、最も一般的な命名にコンセンサスがあるかどうか、または他のものよりも理にかなっている理由については良い推論があるかどうかを見たいと思うだけです。

+3

私はUQ_を使用しています...... –

+1

@Mitch何故?私もそうしますが、私はいつも誰も "U"を使わない理由を自分に尋ねます。 'Q'は何を意味していますか? –

+0

IndeXについてIXについて同じ質問をすることができます。なぜ私だけではないのですか? –

答えて

41

私の考えは、鍵ではないという制約です。

それはコースのキーとして使用され、行を一意に識別し、それキーないことができます。

例として、キーが「ThingID」であり、サステイナのキーが自然キーのThingNameの代わりに使用されます。まだに制約があります ThingName:キーとしては使用されません。

(クラスタ化されている場合は)UQとUQCも使用します。

代わりに一意のインデックスを使用し、「IXU」に移動することができます。採用されるロジックによって、インデックスはキーでもありますが、ユニークな場合に限ります。それ以外の場合はインデックスです。だからユニークインデックスの場合はIK_columnname、ユニークでないインデックスの場合はIX_columnnameから始めます。素晴らしい。

一意の制約と一意のインデックスの唯一の違いは、INCLUDE列です。

編集:2013年2月.SQL Server 2008以降、インデックスにもフィルタが適用される可能性があります。制約は、だから、それはSQL-使用して惑星の残りなるためのユニークなインデックス(あまりにもクラスタ化のためのIKC)のための

  • 使用IKあたりとしてUQと

    • スティックの1にダウンしていない

      が来ることができますインデックスと制約のために一貫した...

  • +1

    "UIX"より "IXU"を強くお勧めしますか? –

    +1

    を参照してください。https://blogs.msdn.microsoft.com/dtjones/2009/10/29/best-practice-naming-constraints/ –

    6

    私はUQを使用します。 UKのKは、PKとFKで使用されているようにKを考えるようになります。まあ、私はイギリスのことをとにかく考えた後です。皮肉なことに、これはUNIQUEのプレフィックスでなければなりません。英国で他の多くの団体が誕生したとき=)

    89

    私の命名規則:

    • 主キー。 _PK
    • ユニークなインデックス/制約。 _AK {xx}
    • 一意でないインデックス。 _IX {xx}
    • 制約を確認してください。_CK {xx}
    • デフォルトの制約。 _DF {xx}
    • 外部キー制約。 _FK {xx}

    {xx}は2桁のシーケンス番号で、テーブルごとに各拘束タイプごとに01から始まります。プライマリキーにはシーケンス番号が1つしかないため、取得できません。 2-charはアルファ接尾辞の意味は以下のとおりです。

    • PK:主キー
    • AK:代替キー
    • FK:外部キー
    • IX:インデックス
    • CK:
    • DFを確認してください。 DeFault

    私は、一般にメタデータ/システムカタログデータをobjではなく制御オブジェクトでグループ化したいectタイプ。

    +5

    AK:代替キーは、SQL Server 2012のデザインサーフェイスでも同様に呼び出されます。 –

    +7

    @AlexKeySmith:** MicrosoftがAKを使用する理由を説明してくれてありがとうございました! –

    +0

    問題ありません@ TJCrowder :-) –