たとえば、本とCDを販売しているとしましょう。両方に同じテーブルを使用することはできないため、両方のデータベースにテーブルがあります。また、両方の在庫テーブルがあります。これは、外部キーを介して、対応するアイテムのテーブルを参照します。このような:
book book_stock
----- ----------
bookID book_stockID
title bookID
price
cd cd_stock
----- ----------
cdID cd_stockID
title cdID
price
ただし、type
列に応じて両方のアイテムのテーブルを参照する1つの一般的な在庫テーブルが必要です。
book stock
----- ----------
bookID stockID
title type
itemID
price
cd
-----
cdID
title
では、複数のテーブルをチェックするような制約を作成するにはどうすればよいでしょうか。
残念ながら、foreighnキーは常に1つの親テーブルに基づいているため、このような制約を作成することはできません。
できることは、入力データのタイプに応じてテストするトリガーを作成し、不適切な変更をロールバックすることです。
このようなもの:
CREATE TRIGGER insert_stock_child
BEFORE INSERT
ON stock
FOR EACH ROW
BEGIN
IF new.type = 'BOOK_TYPE' AND (SELECT COUNT(*) FROM book
WHERE book.bookID = new.itemID)= 0
THEN
INSERT error_msg VALUES ('No such book!');
END IF;
END;
-- same logic for the cd table
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加