2017-10-05 3 views
0

SQL Serverデータベースにデータを読み込むサービスがあります。サービスはnodejsで書かれています。複数のプロジェクトで共有されているデータベーススキーマを保存する方法は?

すぐに、データベースのデータを表示するWebサイトを作成する必要があります。次に、別のWebサイト、データベースの管理パネルを作成します。

データベースとやり取りする可能性のあるサービスが、すぐに追加されます。新しいサービスは、同じ言語またはプラットフォームを使用しないことがあります。

現在、データベーススキーマは、サービスコードにバンドルされているSQLファイルに含まれています。単体テストは、ファイルを使用して、各テストの前にテストデータベースを設定します。

2,3、またはそれ以上のプロジェクトでデータベーススキーマを共有するには、どのような方法が最適ですか?

データベースを変更した場合、プロジェクトまたはそのテストのいずれかを更新することを忘れることはできません。

業界のベストプラクティスは何ですか?データベーススキーマを別個のモジュールに入れて、依存関係を維持する必要がありますか?どのように異なる言語を使用する問題を解決するには?

+0

ベストプラクティスについてはわかりません。しかし、各Webサイトの統合テストを行うことはできますか? – mike123

答えて

1

これは複雑な問題で、1つの最善の答えがあるかどうかはわかりません。

あなたが直面している問題は、カップリングの1つです。解決策の中には、他のいくつかのアーティファクトの依存関係があります。ソフトウェアで最も古いアーキテクチャーの原則の1つは、カップリングを減らすことです。これは、バグ、遅い開発、修正するのが難しいコードにつながります。

ソフトウェア設計における結合を減らす方法はいくつかあります。古典的な答えは、インタフェースと依存性注入を導入することです。明らかにデータベースでは実用的ではありません。

「最もきれいな」方法は、データベースをAPI経由でアクセスできるようにすることです。バージョニングを使用して、複数のアプリケーションがその依存関係を管理できるようにすることができます。アプリケーションAはバージョン1.0のAPIに対してコーディングされており、そのバージョンを変更しないことを約束します(少なくとも非推奨通知はありません)。これにより、かなりの量の追加作業と潜在的なパフォーマンス上の課題が導入されます。

より実用的なソリューションは、すべての環境で自動配置メカニズムを使用し、データベースのスキーマを中央から取得し、すべてのアプリケーションにすべてのデータベース機能を使用する一連の統合テストを含めることです。開発者やテストのデータベースは、スキーマの「読み取り専用」ステータスなど、VMイメージを使って配布することができます。

私はこれをさまざまな手法で行っています。最初のステップは、データベースをソースコードリポジトリで管理できるテキストファイルに変換するプロセスを作成し、それを再生して作業データベースを作成することです。 Here'sこれを行う方法に関する多くの情報を持つSOの質問。

データベースをバージョン管理下に置くと、データベースをチェックアウトしてビルドするようにプロジェクトを依頼するか、ビルドするか、ドッカーイメージやVMなどのいずれかを決定することができます。

あなたのアプリケーションには、技術的な特徴によって強制されるものではなく、あなたのソリューションに重要な新しいレイヤーを導入する必要はありません。

+0

dbスキーマの中央ソースを作成するにはどうすればよいですか? 私の現在のアイデア: 1.データベースをセットアップするためのSQLファイルを格納するgitリポジトリを作成します。 2.公式のDBイメージからSQLを適用して、dbドッカーのイメージを作成します。 3.プロジェクトごとに、プロジェクト+ dbを実行するファイルを作成するドッカーを作成します。 – Euphe

+0

答えを更新しました。データベースをバージョン管理下に置くことで、管理された方法でスキーマを更新できます。 1つはあなたが持っている、あなたはドッカー画像などを作成することができます –

関連する問題