2011-02-01 17 views
0

こんにちは 私は2つのテーブルAとBを持っています。AとBの間に1対1の関係があります。今はAとBのレコードがあります。この1対1の関係によって関連しています。どのように両方のレコードを削除しますか。私がA1を削除すると、B1と同じ競合エラーが発生します。1対1の関係で両方のレコードを削除する

私はちょうど好奇心

だがあなたに

+3

テーブルや外部キー用のcreate table scriptなどのスキーマ情報を入力してください。あなたの質問への答えはおそらくカスケード削除を使用することです。 –

+0

データベースが決して許可してはならない周期的なFKがない限り、B1は同じことができません。 – leppie

+1

ちょうど好奇心。そのような設定でテーブルにデータをどのように追加しますか?追加できない場合は、削除する必要はありません。 –

答えて

0
ALTER TABLE [dbo].[YourTable] WITH CHECK ADD CONSTRAINT  
[FK_YourTable1_YourTable2] FOREIGN KEY([YourForeignKey]) 
REFERENCES [dbo].[YourTable2] ([Id]) 
ON DELETE CASCADE 
GO 

モデルテーブルCAB関係(スキーマは、表A、表Bにforeighn /主キーである主キーを持っているような場合)。 Cは、ABの両方を参照します(FK)。関係を削除するには、Cの対応する行を削除します。エンティティAおよび/またはBも削除する必要があるかどうかは別の問題です。

+0

なぜですか?仲介テーブルのない1対1(または何もない)関係は、完全に許容可能なIMOです。また、プライマリ・テーブルのスキーマを絶対に変更できないテーブルを拡張するのにも適しています。 – leppie

+0

@leppie:質問はそれをすべて言っています:それは同じテーブルを行い、あなたは更新異常を取得します。関係を削除して、エンティティなども削除してください。 – onedaywhen

+0

私はあなたに何を伝えようとしているのか分かりません。 – leppie

0

何データベースあなたが使っています、MSSQL ORACLE、MySQLをありがとう!一部のデータベースではカスケード削除がサポートされています(最初の2つはサポートしています)。または、トリガーを使用する別の方法があります。それを削除してseccondをトリガーしますが、最初にそれらの2つのテーブルの一貫性を無効にし、最後にそれを有効にします。

編集:MSSQLを使用している場合は、このようにカスケード削除を設定できます。

+0

Microsoft sql(TSQL) – David

+0

あなたのスキーマが次のようなものであるとします。テーブルAにテーブルBのプライマリ/フォワードキーであるプライマリキーがある場合、上記の編集済みSQLを使用してカスケード削除を設定できます。 – Eduard