1

Authors テーブルと BookTitles テーブルに行の挿入や更新などの変更が加えられたときに、SQL Server ジャンクション テーブルの行を保持するトリガーまたはストアド プロシージャを作成するためのサンプル コーディングを示すことができますか?

次のテーブルがあります。

Authors:
ID
NAME
ZIP
AND SOME MORE COLUMNS

BookTitles:
ID
TITLE
ISBN
AND SOME MORE COLUMNS

This is the table we will use as our junction table:

AuthorTitles:
ID
AUTHOR_ID
BOOK_TITLE_ID

VB.Net フォームでコーディングする代わりに、トリガーでこれを行いたいと考えています。

すべての助けをいただければ幸いです。

上記のテーブル構造は、私たちが何をしようとしているのかを示すために単純化されています。

教師とプログラムのジャンクション テーブルを実装しています。

実際のシステムの写真は次のとおりです。

4

1 に答える 1

2

著者ごとに少なくとも 1 つの本を必要とする、またはその逆の外部キー制約がない限り、特別な処理が必要な唯一のケースは、本のタイトルまたは著者への削除の場合です。それらは次のように行うことができます:

CREATE PROC BookTitle_Delete(@Book_ID As INT) As
 -- First remove any children in the junction table
 DELETE FROM AuthorTitles WHERE BOOK_TITLE_ID = @Book_ID

 -- Now, remove the parent record on BookTitles
 DELETE FROM BookTitles WHERE ID = @Book_ID

go

一般に、トリガーでテーブルのメンテナンスやその他のことを行いたいという誘惑に抵抗する必要があります。トリガーは目に見えないため、追加のオーバーヘッドが追加され、DBA のメンテナンスの問題が発生する可能性があり、多くの微妙なトランザクション/ロックの複雑さとパフォーマンスの問題につながる可能性があります。トリガーは、実際にはクライアント アプリケーションから隠す必要があり (監査など)、他の方法では実際に実装できない単純なもののために予約する必要があります。これはそれらのケースの 1 つではありません。

これを行う「目に見えない」方法が本当に必要な場合は、Cascading Foreign-Key を実装するだけです。これもお勧めしませんが、それでもトリガーよりは望ましい方法です。

于 2012-07-14T14:25:23.720 に答える