3
モノリスからマイクロサービスに移行するときに外部キーの制約を処理する方法は?
私のチームは、モノリシックASP.NETアプリケーションから.NET CoreおよびKubernetesに移行しています。コードの変更は予想通りに進行しているように見えますが、私のチームが多くの不一致に遭遇しているのはデータベースの周辺です。 現在、ビジネス全体のすべてのデータを格納するかなり大きなSQL Serverデータベースがあります。私は、コードを分割するのと同様の方法でデータベースを分割することを提案しています-1つの(論理)データベースのカタログデータ、別のデータベースの在庫データ、別の注文など-そして各マイクロサービスはそのデータベースのゲートキーパーになるでしょう。 ここでの意味は、マイクロサービスの境界を越える外部キーを削除する必要があり、境界を越えて到達するprocsおよびビューは禁止されることです。すべてのデータモデルは同じ物理データベースに存在する場合と存在しない場合がありますが、存在する場合でも、相互に直接対話することはできません。注文は引き続きIDでカタログアイテムを参照しますが、データベースレベルでデータの整合性が厳密に強制されることはなく、そのデータはSQLではなくコードで結合する必要があります。 これらの損失は、マイクロサービスへの移行と、それに伴うスケーラビリティのメリットを得るための必要なトレードオフと考えています。縫い目を賢く選択し、それらの周りに展開する限り、問題ありません。他のチームメンバーは、すべてが同じモノリシックデータベースにとどまる必要があるため、すべてがACIDであり、参照整合性をどこにでも保持できることを固く主張しています。 これは私の質問に私をもたらします。まず、外部キーの制約と参加に対する私の姿勢はもっともらしいですか?もしそうなら、誰かが私が同僚に提供できる信頼できる読み物を知っていますか?彼らの立場はほとんど宗教的であり、彼らはマーティン・ファウラー自身が彼らが間違っていると告げる以外に何かに左右されることはないようです。