1

Visual Studio SQL Server DBProject のデプロイ中にこのエラーを受け取りました

DBProj.dbschema(0,0): 警告 SQL01271: テーブル [dbo].[Match] と [dbo].[Team] の間の名前のない外部キーは、テーブルをチェックすることによってチェックされます。テーブル全体のチェックを避け、新しい制約のみをチェックするように、外部キーに名前を付けます。

私のテーブル定義は

CREATE TABLE [dbo].[Match]
(
    MatchID         int identity(11,2) PRIMARY KEY, 
    TournamentID    int not null REFERENCES Tournament(TournamentID),
    Team1_ID        int not null REFERENCES Team(TeamID),
    Team2_ID        int not null REFERENCES Team(TeamID),
    MatchDate       date,
    MatchTime       time
)

CREATE TABLE [dbo].[Team]
(
    TeamID    int PRIMARY KEY,
    TeamName  varchar(50)
)

更新: 名前のない制約

名前を指定しない場合、SQL は、制約のタイプを示す接頭辞から構築されたランダムな名前を生成し、部分的なテーブル名と列名の後にランダムな英数字の文字列が続きます。通常は次のようになります: DF_ MyTable _MyColu__3F3159AB

DBProject が再構築および展開されるたびに、このプロセスが繰り返され、ランダムな制約名の新しいセットが生成されます

このエラーはどういう意味ですか? その意味は何ですか?特に、外部キーに名前を付けて、テーブル全体のチェックを避け、新しい制約のみをチェックします。

4

1 に答える 1

4

まとめ:常に制約に名前を付けるのがベスト プラクティスです

この質問に関する情報は、私にとっては入手が困難です。これまでのところ、制約に関するいくつかの新しい情報を見つけることができ、より多くのことを学んだと言えます。

これと同じ質問を dba.SE.com に投稿すると、この回答が得られました

SQL Server で名前のない制約を削除する方法

名前を指定しない場合、SQL は、制約のタイプを示す接頭辞と、その後にランダムな英数字文字列が続く部分的なテーブル名と列名から構築されたランダムな名前を生成します。通常は次のようになります。

DF__MyTable__MyColu__3F3159AB

.

「ジャンク」名を持つ DRI オブジェクトのSQL Server 配置スクリプトのクリーンアップセクション

たとえば、プライマリ キーを作成しても名前を付けない場合、SQL Server は既定の自動生成された名前 PK__TableName__Junk (PK__Customer__A4AE64082CE326F2 など) を使用します。これにより、SQL Compare は主キーを削除して再作成します。これは、その名前のジャンク部分がデータベースによって異なるためです。

これは、機能的な変更がなくても、比較ソフトウェアを使用して生成された変更スクリプトは、新しいビルドのたびに、「古い」制約を削除して「新しい」制約を追加しようとすることを意味します。テーブルの主キーを削除して再作成することは、非常にコストのかかる操作になる可能性があり、機能的な変更がないため、それがなくても問題ありません。

.

Dan Jones ブログ:ベスト プラクティス: 名前付けの制約

肝心なのは、怠惰な DBA/プログラマーではなく、システムに制約の名前を付けさせることです。キーボードの数回の余分なタップは、長期的には価値があります.

実際、これは私の DBA インタビューの質問の標準的な武器庫の一部になるかもしれません: あなたの制約に名前を付けますか? またはそのようなもの。

于 2012-08-21T20:54:58.960 に答える