MySQL 5.0.95 を使用しています。顧客がイベントのゲスト リストを作成できる Web フォームがあります。ゲスト リストはオフィス マネージャーによって承認され、そこからフロント デスクがその日の承認された訪問者を取得します。
スペースを節約するために問題を煮詰めました。_events と _guests の 2 つのテーブルがあります。2 つの一致するアーカイブ テーブルもあります。
CREATE TABLE IF NOT EXISTS visitor._events (
eventId int( 11 ) NOT NULL AUTO_INCREMENT,
eventName varchar( 200 ) NOT NULL,
PRIMARY KEY ( eventId )
);
CREATE TABLE IF NOT EXISTS visitor._archived_events (
eventId int( 11 ) NOT NULL,
eventName varchar( 200 ) NOT NULL,
PRIMARY KEY ( eventId )
);
CREATE TABLE IF NOT EXISTS visitor._guests (
guestId int( 11 ) NOT NULL AUTO_INCREMENT,
eventId int( 11 ) NOT NULL,
guestName varchar( 200 ) NOT NULL,
PRIMARY KEY ( guestId )
);
CREATE TABLE IF NOT EXISTS visitor._archived_guests (
guestId int( 11 ) NOT NULL,
eventId int( 11 ) NOT NULL,
guestName varchar( 200 ) NOT NULL,
PRIMARY KEY ( guestId )
);
イベントが終了したら、事務局長がデータベースからイベント (およびそのゲストの記録) を削除できるようにしたいのですが、記録管理のためにそれらのイベントを 1 年間アーカイブしたいと考えています。
DELETED のレコードを _guests テーブルから _archive_guests テーブルにコピーする TRIGGER を作成しました。
DELIMITER $$
DROP TRIGGER IF EXISTS TR_A_DEL_guests $$
CREATE TRIGGER TR_A_DEL_guests DELETE ON _guests FOR EACH ROW BEGIN
INSERT IGNORE INTO _archived_guests (
guestId,
guestName
) VALUES (
OLD.guestId,
guestName
);
END $$
DELIMITER ;
また、_guests テーブルから特定の eventID のすべてのゲスト レコードを削除し、削除されたレコードを _events テーブルから _archived_events テーブルにコピーする TRIGGER もあります。
DELIMITER $$
DROP TRIGGER IF EXISTS TR_A_DEL_events $$
CREATE TRIGGER TR_A_DEL_events AFTER DELETE ON _events FOR EACH ROW BEGIN
DELETE FROM _guests WHERE eventId = OLD.eventId;
INSERT IGNORE INTO _archived_events (
eventId,
eventName
) VALUES (
OLD.idEventId,
OLD.eventName
);
END $$
DELIMITER ;
つまり、レコードが _events から削除されると、そのレコードは _archived_events に移動され、そのイベントのすべての _guests レコードが _archived_guests テーブルにコピーされます。
私が抱えている問題は、顧客がゲスト リストを編集しているときに、ゲスト レコードを削除するとアーカイブされることです。ゲストを編集/削除できますが、予定を完全に削除することはできません。
私の質問: 最初に適切な _guest レコード (eventId = OLD.eventId) のそれぞれを _archived_guests にコピーし、次に _event レコードを _archived_events にコピーする、削除されたイベントで 1 つの TRIGGER のみを使用する方法はありますか?