システム間でデータ連携を行っている場合に、片方のシステムで削除されたレコード(データ)をもう片方のシステムからも削除したい、と考えることがあるかと思います。
ところが、「削除されたレコードがある」ということを連携するのは単純な連携では実現いただけません。
「単純な連携」とは?
例えば、連携元=システムAのデータを連携先=システムBに連携している場合、一般的にはシステムAからレコードを取り出して、そのレコードのIDなどでシステムBに問合せをし、すでに登録されているレコードであれば更新(UPDATE)、未登録のレコードであれば新規登録(INSERT)という流れでデータが連携されていきます。
本記事では、以上を単純な連携と呼びます。
単純な連携ではレコードが削除されたことを連携できない理由
ここで、システムAからあるレコードを削除(物理削除)します。
すると、削除レコードは(もうどこにも存在しないので)参照することはもちろん、取り出すこともできません。
単純な連携で実施できるのは、存在するレコードを対象とした連携だけです。
そのため、システムAから削除レコードを取り出して、そのレコードのIDなどでシステムBに問合せをし、すでに登録されているレコードだったら削除する、なんてことは実施できません(どこにも存在しないレコードを取り出せるツールは残念ながらこの世に存在しません…)。
削除レコードの連携はあきらめるしかないのか?
(上述したとおり、どこにも存在しないレコードを取り出せるツールは残念ながらこの世に存在しませんので)データ連携ツールだけでは、削除レコードの連携はできません。
削除レコードを連携するには、連携元や連携先システムであらかじめ削除レコードの連携も考慮した準備(事前の設定や設計など)が必要です。
削除レコードの連携も考慮した準備の例としては、物理削除ではなく論理削除を用いる、レコードを削除したことを専用のテーブルに記録する(削除ログを用意する)方法が考えられます。
また、連携元と連携先で全く同じID情報か何かを持っておき、連携先にあるIDで連携元を検索して、見つからなければそのIDのレコードは連携元から削除されたとして、連携先からも削除する方法や、
連携元にレコードを削除したタイミングで発火するトリガーを(例えば、(連携元に用意されているなら)Webhook機能を利用して)設定しておき、当該トリガーが発火したら連携先からもレコードを削除するという方法も考えられます。
上記のような準備がむずかしい場合は、定期的にデータの洗い替え(連携先のレコードを全て削除し、再度、連携元から連携先へ全レコードを連携する)を検討することになります。
これらはあくまで一例です。連携元/連携先しだいで他の方法も考えられるでしょう。
まとめ
連携元で削除されたレコードを連携先でも削除したい、というご相談はよく頂戴するのですが、残念ながら(弊社製品含め)データ連携ツールだけではかなわないことが多いです。
とはいえ、上述のとおり削除レコードの連携に使えそうな何かしらがあれば実現いただける連携でもありますので、ひとまず連携元/連携先システムのつくりをチェックいただければと思います。
関連コンテンツ