私は従来のデータベースに行き、列自体を参照するいくつかの外部キーを発見しました。参照先の列は主キー列です。自己参照外部キーの意味は何ですか?
ALTER TABLE [SchemaName].[TableName] WITH CHECK ADD
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id])
REFERENCES [SchemaName].[TableName] ([Id])
どのような意味ですか?
私は従来のデータベースに行き、列自体を参照するいくつかの外部キーを発見しました。参照先の列は主キー列です。自己参照外部キーの意味は何ですか?
ALTER TABLE [SchemaName].[TableName] WITH CHECK ADD
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id])
REFERENCES [SchemaName].[TableName] ([Id])
どのような意味ですか?
ALTER TABLE [SchemaName].[TableName] WITH CHECK ADD
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id])
REFERENCES [SchemaName].[TableName] ([Id])
この外部キーは完全に冗長で無意味です。削除するだけです。制約が検証された行と一致するため、決して違反することはありません。
関係はあなたが右の「キー」をクリックした場合、それはビジュアルデザイナを使用して、非常に可能性が作成されている可能性が理由のためのように、2つの異なる列(例えばId
と
ParentId
)
の間になり、階層テーブルで
オブジェクトエクスプローラで「新規外部キー」を選択し、作成した外部キーを削除せずにダイアログボックスを閉じ、開いているテーブルデザイナで他の変更を加え、この種類の冗長な制約を作成します。
これは、モデルの冗長性を減らすための推奨方法です。自己参照外部キーを使用する場合(例のように)、表の行間に階層関係が作成されます。表から行を削除するときに何が起こるかに注意してください。削除時にカスケードすると、依然として必要な行が削除される可能性があります。 これらのキーを使用すると、プログラム/プログラマの責任とするのではなく、データ検証の一部がDBモデルに移動します。いくつかの衣装は、このようなやり方を好みます。私は、プログラムやプログラマが責任を負うことを望みます。データモデルは、実稼働環境ではリファクタリングやアップグレードが難しい場合があります。
参照は同じ列の間です。それは階層的な関係としてはほとんど機能しません。 –
そう思った。私はそれが可能であることにも驚いています。 – HuBeZa