1

MS SQL Server のインデックスと制約は、それらが定義されているテーブルに対してローカルです。そのため、複数のテーブルに同じインデックスまたは制約名を問題なく作成できます。

外部キー制約 (誰もが知っているように、キーではなく制約) は Keys サブフォルダーに表示され、それらの名前はグローバル スコープで表示されます。

「キー」がグローバルスコープの名前を持っている理由を知っている人はいますか? キーとインデックスの違いを理解しています。名前のスコープにこのような違いがあるべき理由がわかりません。すべての場合において、それらは定義されたテーブルに対して「ローカル」です。

ティア

4

1 に答える 1

3

Peter Gulutzan と Trudy Pelzer による "SQL-99 Complete, Really" によると、制約名はそれらが存在するスキーマによって修飾され、制約が影響するテーブルは同じスキーマに存在する必要があります。ただし、制約名はそのテーブル名によって修飾されていません。制約名は、それが存在するスキーマ内で一意である必要があります。

  • はい:myschema.some_primary_key
  • いいえ: myschema.mytable.some_primary_key

「なぜ」これが当てはまるかについては、SQL-99 のASSERTION. 主キー、外部キー、およびチェック制約の場合と同様に、アサーションは単一のテーブルに「属する」わけではありません。アサーションは、いずれかが成功するために真でなければならない条件を宣言しINSERT/UPDATE/DELETE、アサーションは複数のテーブルを参照できます。これらの制約名をテーブルで修飾しても意味がありません。

SQL アサーションを実装している RDBMS ブランドの数はわかりませんが (実際には 1 つも知りません)、制約名の標準 SQL ルールに準拠している可能性があるため、将来的にはアサーションを実装することを選択できます。規格に準拠した機能。

于 2009-03-03T05:39:13.970 に答える