🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

3回答

4753閲覧

複数アプリケーションを単一データベースで運用するシステム構成の是非について

tomona

総合スコア37

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2019/12/16 09:48

編集2019/12/18 10:53

複数アプリケーションを単一データベースで運用するシステム構成の是非について

<概要>
業務効率化アプリケーションの開発を計画しており、システム構成を検討しています。
販売管理、購買管理、経費管理といった複数のアプリケーションが存在し、それぞれ単独で使用しつつ必要に応じてデータは連携したいと考えています。
認証基盤は一つだけ用意し、それぞれのアプリケーションにアクセス可否を登録したテーブルを設け、アクセス管理を行う予定です。

<ご質問>
ここですべてのアプリケーションのテーブルを一つのデータベース上に構築しようと考えていますが、通常想定される設計でしょうか。

単一データベースにした場合、以下の事項を懸念しています。

  • 複数アプリケーションからのアクセスが集中するため、負荷がかかりやすい。
  • テーブルが集約されていることでメンテナンスが難しい。

その他、アプリケーション毎にデータベースを分割し構築するということも考えられますがこのような設計はあり得ますでしょうか。
負荷分散にはなりそうですが、JOINが複雑になったり外部キー制約が使えないといったデメリットが考えられます。

システム構成を考えた経験が乏しく、アドバイスいただけると幸いです。

御礼

皆様回答ありがとうございます。
皆様の回答の方向性としては単一DBの設計を推奨されており、当初の予定通り単一DBに集約して開発したいと思います。
皆さんのご回答、非常に参考になりました。
ベストアンサーはスキーマの活用など、自分にはない視点でご回答くださった「Orlofsky」さんを選出させて頂きました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

データの関連性が高い=各システムの独立度が低いのであれば、1つでいいんじゃないでしょうか。
性能は何とでもなるというか、1つの箱であればDBを分けても負荷はあまり変わらないのでは?

あとは、運用面でしょうか。バックアップ要件がシステムごとに異なるとか、「xxシステムのデータベースだけ止める」ということが無いかとか。

投稿2019/12/16 13:08

otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomona

2019/12/18 10:40

ご回答ありがとうございます。 DBを分けるという言葉にはDBサーバーを分けるという意味合いも含んでいます。 運用面でシステム別に区分することで想定される点としてはカラムの追加やテーブルの増減といった点です。 特定のシステムのDBだけ留めるといったことは想定していないです。
guest

0

どの程度のアクセスを考えられておられるのでしょうか?
BtoCでかなりのユーザーが見込まれるような状況ででない限り、分散DBは考えない方がよろしいかと。

複数のアプリケーションが存在するなら、基盤や連携が重要です。
大規模になると基盤サーバやその他の業務サーバー構築して、連携のインターフェースを決めてなどとなってきますけど、

システム構成を考えた経験が乏しく

という方が設計されるなら、大規模という事はあり得ないと思いますので、コンパクトな設計にしておいて、習熟と規模の増大が共になる状態になった時にスケールアウトを考えるのが良いと思います。

利用者が少ないのに大規模なシステム構築をしてしまっては、コスパが悪すぎると思いますので。

投稿2019/12/16 12:21

編集2019/12/16 14:42
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomona

2019/12/18 10:50 編集

ご回答ありがとうございます。 BtoBのシステムで同時アクセス1000件程度に耐えうるのであれば問題ないと考えています。 大規模なシステムではありませんが、将来的にスケールしたときにネックにならないか心配しています。 確かに最初は利用者が少ないため、単一DBにまとめたほうが開発は楽になり、良さそうですね。
sazi

2019/12/18 11:00

1000人の利用者がいるとして、同時アクセスの実効値はせいぜい2割の200人です。 それでも分散させるというなら、ロードバランサーだとか高額な機器が必要になったりしますので、その辺も考慮に入れて検討された方が良いかと思います。
tomona

2019/12/18 11:39

追加アドバイスありがとうございます。 ロードバランサーですね。考慮に入れて検討したいと思います。
guest

0

ベストアンサー

複数アプリケーションからのアクセスが集中するため、負荷がかかりやすい。

データベース・サーバーをそれなりの性能のハードウェアを用意します。

テーブルが集約されていることでメンテナンスが難しい。

基本的には、販売管理、購買管理、経費管理のシステム毎にデータベースのユーザー(スキーマとも)を分けて独立性を保てるように設計します。社員マスター、消費税率テーブルや顧客マスター、などのテーブルや共通関数(ストアド・プログラム)などをデータベース全体で共用する場合もあります。
必要な権限を与えて他システムと外部キーを設定することもできます。

別々のデータベース・サーバーを用意するとデータベース・リンクなどで他のシステムのテーブルを参照しなければならないので、データベース・リンクを多用するとパフォーマンスが落ちることもあるので、条件によってはMATERIALIZED VIEW を使ってパフォーマンスが落ちないようにする場合もあります。

投稿2019/12/16 11:42

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomona

2019/12/18 10:49

ありがとうございます。なるほどですね。 各システムのDBアクセス用のユーザーをスキーマで区分することで独立テーブルや共通テーブルを管理するのですね。 サーバーの性能を上げてDB負荷を解消するのが通例なのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問