次の問題があります。私たちのエンタープライズアプリケーションにはMySQLのデータベースがあり、その構造が複雑になりすぎているようです。100を超えるテーブルがあります(7年間開発されています)。
ただし、ほとんどのテーブルは他のテーブルとはまったく関係がありません。誰もが使用する一般的なテーブル(辞書)がいくつかありますが(そのようなテーブルは約20個)、それだけです。このデータベースをより高速で信頼性の高いものにする方法について疑問が生じました。
私はデータベースの分解についてたくさん読みました。つまり、さまざまなドメインに関連するテーブルをさまざまなデータベースに配置します。たとえば、運送状やその他の紙関連のものはすべてPapersというデータベースに配置され、顧客とその注文に関連するものはすべてClientsというデータベースに配置されます。
ここに2つの問題があります。
- ユーザーは、エンタープライズアプリケーションが単一のドメインで動作していることを確認する必要があります。開発者は、データベースを操作するコアをある方法で変更して、複数のデータベースに対応できるようにする必要があります。
- 共通のテーブルが問題を引き起こします。それらは単一のデータベースに保持する必要があり、分解後にすべてのデータベースに複製することはできません。したがって、クエリSELECT * FROM A JOIN Bを作成するにはどうすればよいですか?AとBは異なるデータベース(異なるサーバー上)にありますか?
どちらの質問も実際には同じ問題に対処しています。この問題を解決するための一般的なエンタープライズパターン(GoFなど)はありますか?特にJavaEEに適したパターンに興味があります。