1. ホーム
  2. sql

[解決済み] 一意制約の命名規則

2022-05-29 07:18:53

質問

命名規則は重要であり、主キーと外部キーは一般的に使用され、明白な規則があります ( PK_TableFK_Table_ReferencedTable それぞれ)。 また IX_Table_Column という命名もかなり標準的なものです。

UNIQUE制約についてはどうでしょうか。 この制約のために一般的に受け入れられている命名規則はありますか? 私が見たのは UK_TableName_Column , UQ_TableName_Column を推奨している人がいます。 AX_TableName_Column - どこから来たんだろう。

私は通常 UQ を使ってきましたが、特に好きなわけではありませんし、それを使うという自分の選択を守るために UK の擁護者たちに対して、それを使うという自分の選択を守らねばならないのは楽しいことではありません。

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

どのように解決するのですか?

私の考えでは、それはキーではなく、制約です。

それは はもちろんキーとして使われ、行を一意に識別しますが、それは はそうではありません。 はキーではありません。

例えば、キーが "ThingID"である場合、代理の キー であり、自然なキーであるThingNameの代わりに使用されます。この場合でも を制約する ThingName: それはキーとして使われませんが。

UQとUQCも使う(クラスタ化されている場合)。

代わりにユニークインデックスを使用して、"IXU" を使用することができます。採用されているロジックでは、インデックスはキーでもありますが、一意である場合にのみ使用されます。それ以外の場合はインデックスです。したがって、次のようになります。 IK_columnname を一意なインデックスに、そして IX_columnname は一意でないインデックス用です。Marvellousです。

そして、一意制約と一意インデックスの唯一の違いは、INCLUDEカラムです。

編集:2013年2月 SQL Server 2008以降、インデックスもフィルタを持つことができるようになりました。制約はできません。

ということで、結局はどちらか

  • SQL を使用する他の惑星と同じように UQ を使用する。
  • 一貫性を保つため、ユニークインデックスには IK を使用する(クラスター化には IKC も)。