複数の社内アプリケーションがすべて1つのデータベースの下にあり、各アプリケーションがその単一のデータベース内で独自のスキーマを与えられている環境で誰かが働いていますか?私は、1つのDB内のいくつかの小さな関連アプリケーションを意味するだけでなく、他のスタンドアロンアプリケーションと一緒に1つのDBに配置されるスタンドアロンアプリケーションのフルのようなものです。
私はずっと前から導入されているこのようなアーキテクチャを扱っており、新しいスタンドアロンアプリケーションを独自の個別のDBに配置する必要があると主張しようとしていますが、これは「すべてを1つにまとめる」と基本的に言われています「データベース」アーキテクチャは、個別のDBよりも理にかなっており、私は何と言ってもいいのか途方に暮れています。他の誰もこのように1つのデータベースに複数のアプリケーションを配置していないので、インターネットでこれについて多くの情報を見つけることができないように感じますが、多分私は完全に間違っていますか?
Microsoft SQL Serverおよび.NET Webアプリケーションを使用しています。
はい、同じような環境で働いています。
スキーマとデータベースの違いは、アプリケーションの観点からは大きな違いはありません。結局のところ、サーバー上のすべてのデータベースは同じサーバー上で実行されます。私はそれを発汗しないでしょう。
重要なことは、テーブル間の分離を維持し、1つのセットが別のセットを参照しないようにするか、ドメインにまたがるクエリを使用しないことです。
私はDBの設定をDBAに任せ、SQLが適切であることを確認しました。
私は両方の環境で働いてきました。私はシェアードDBアプローチの無条件の推進者でした。 limitations を確認して再考するには、少し時間がかかりました。同じ bounded context で動作する密接に関連するアプリケーションのみを想定してください。
一般に、shared-dbは非常にうまく機能します。それらの前のCOBOLプログラムのように。そして、それらと同様に、データの扱い方を知っている(そしてそれを正しく行う)ソフトウェアによって処理されるのを待つ受動的なものとしてデータを見るようにします。シングルdbには、アプリケーションでエンタープライズデータを共有できるという利点があります。正確には、グローバルデータはさまざまなモジュールで共有されます。
しかし、現代のソフトウェアエンジニアリングは、モジュールをカプセル化し、グローバルデータを回避し、OOの方法で実行することを学びました。データは、確実に処理できるコードと一緒にのみ意味があります。なぜ無視し続けるのかデータベースレベルでのこれらの原則
企業ではすべての活動が何らかの形でリンクされているため、単一データベースは非常にうまく機能します。これが、多くの主要なERPの背後にある原則です。すべてを1つのDBに格納すると、さまざまなアプリケーションをリアルタイムで簡単に統合できます。
利点:
リスクとデメリット:
今日の傾向は、モノリスを避け、柔軟で進化的でスケーラブルなアーキテクチャを考案することです。
優れたアーキテクチャの鍵は、単一のdbで適切なテーブルを定義することではなく、適切なAPIを定義して、サービスが異なるアプリ間を結合できるようにすることです。
これは言われて、独断的ではありません。同じ境界コンテキストで動作する密接に関連するアプリケーションの場合、共有DBは 有効な代替 のままです=。
私はまた、異なるデータベースが同じデータベースにある状況にありました。ご不便をおかけして申し訳ございませんが、「ベストプラクティス」が「良いビジネス」の対象となることもあります。
あなたが指摘したように、アプリが関連している場合、それらを同じDBに置くことは明らかに意味があります。ビジネス上の理由がある場合(他の回答や指摘されたコメントのように)、その理由を受け入れるか、それらを分離させることでより良いビジネス上の理由を作ってみることができます。 2つ考えられるのは、セキュリティ上の懸念とスケーラビリティです。今日では、多くのアプリが仮想化され、コンテナ化されています。 Docker化された(または使用するコンテナーアプリ)アプリと一緒に提供されるDockerコンテナーにDBを追加するのは簡単です。もちろん、このラインは、ライセンスやスタッフの費用が、必要に応じて別のコンテナを追加できることの利点を上回らないことを前提としています。
つまり、要約すると、それらのアーキテクチャは前例のないものではなく、実行されています。別の方向を提案したい場合は、彼らが彼らの決定を下した理由(技術的またはビジネス)を理解し、その領域に影響を与える議論をするようにしてください。