こんにちは 私は2つのテーブルAとBを持っています。AとBの間に1対1の関係があります。今はAとBのレコードがあります。この1対1の関係によって関連しています。どのように両方のレコードを削除しますか。私がA1を削除すると、B1と同じ競合エラーが発生します。1対1の関係で両方のレコードを削除する
私はちょうど好奇心
だがあなたに
こんにちは 私は2つのテーブルAとBを持っています。AとBの間に1対1の関係があります。今はAとBのレコードがあります。この1対1の関係によって関連しています。どのように両方のレコードを削除しますか。私がA1を削除すると、B1と同じ競合エラーが発生します。1対1の関係で両方のレコードを削除する
私はちょうど好奇心
だがあなたに
ALTER TABLE [dbo].[YourTable] WITH CHECK ADD CONSTRAINT
[FK_YourTable1_YourTable2] FOREIGN KEY([YourForeignKey])
REFERENCES [dbo].[YourTable2] ([Id])
ON DELETE CASCADE
GO
モデルテーブルC
でA
とB
関係(スキーマは、表A、表Bにforeighn /主キーである主キーを持っているような場合)。 C
は、A
とB
の両方を参照します(FK)。関係を削除するには、C
の対応する行を削除します。エンティティA
および/またはB
も削除する必要があるかどうかは別の問題です。
なぜですか?仲介テーブルのない1対1(または何もない)関係は、完全に許容可能なIMOです。また、プライマリ・テーブルのスキーマを絶対に変更できないテーブルを拡張するのにも適しています。 – leppie
@leppie:質問はそれをすべて言っています:それは同じテーブルを行い、あなたは更新異常を取得します。関係を削除して、エンティティなども削除してください。 – onedaywhen
私はあなたに何を伝えようとしているのか分かりません。 – leppie
何データベースあなたが使っています、MSSQL ORACLE、MySQLをありがとう!一部のデータベースではカスケード削除がサポートされています(最初の2つはサポートしています)。または、トリガーを使用する別の方法があります。それを削除してseccondをトリガーしますが、最初にそれらの2つのテーブルの一貫性を無効にし、最後にそれを有効にします。
編集:MSSQLを使用している場合は、このようにカスケード削除を設定できます。
テーブルや外部キー用のcreate table scriptなどのスキーマ情報を入力してください。あなたの質問への答えはおそらくカスケード削除を使用することです。 –
データベースが決して許可してはならない周期的なFKがない限り、B1は同じことができません。 – leppie
ちょうど好奇心。そのような設定でテーブルにデータをどのように追加しますか?追加できない場合は、削除する必要はありません。 –