id,hidden
これは、親テーブルのフィールドに一意の制約を追加し、詳細テーブルを変更して、FK をid,hidden
ではなく ()にすることで簡単に実行できますid
。hidden
ただし、この場合、属性は常に親と同じであるため、詳細テーブルに属性を格納する必要がある理由がわかりませんhidden
。
詳細テーブルの必要なすべての行を更新する更新後トリガーをマスター テーブルに追加したいと思います。
更新します。例。
最初のアプローチ
CREATE TABLE boxTable(id int not null auto_increment primary key,hidden
tinyint not null,
...
CONSTRAINT UQ_BOXTABLE(id,hidden));
CREATE TABLE childTable(...., boxId int not null, hidden tinyint not null,
CONSTRAINT FK_childTable_BoxTable FOREIGN KEY (boxId, hidden) REFERENCES
boxTable(boxId, hidden) ON DELETE CASCADE ON UPDATE CASCADE) ;
boxTableを変更hidden
するたびに、 で自動的に更新されchildTable
ます。
2番目のアプローチ(構文を再確認します。現時点ではmysqlを持っていません)
CREATE TRIGGER AU_boxTable AFTER UPDATE ON boxTable
FOR EACH ROW
BEGIN
IF (new.hidden <> old.hidden) THEN
update childTable set hidden = new.hidden WHERE boxId = new.id;
END IF;
END;
2 番目のアプローチhidden
では、値に関係なく childTable のフィールドを変更できますboxTable
が、最初のアプローチでは変更できません。