web-dev-qa-db-ja.com

Webアプリケーションとデスクトップアプリケーションの両方で1つのデータベースのみを保持することは可能ですか?

私のビジネスモデルで問題が発生しています。詳しく説明します。

私は1年と数か月間ソフトウェアを開発しています。それは食品業界向けです。具体的には、次のようなソフトウェアです:配達、持ち帰り、テーブル予約、POS、買掛金と売掛金、プリント(領収書)、キッチンは注文を監視し、顧客は管理と会計領域を注文します。

まあ、私は主に2つの領域でソフトウェアを分離しました。1つはWeb領域で、もう1つはデスクトップ領域(管理者のみが使用)とローカルインストールです。

1-Webエリア(基本的には次のようにします:)

  • 製品のカタログを表示
  • 顧客が注文する
  • 顧客は注文の代金を支払う
  • など...上記のとおり

2-デスクトップ領域

  • 注文を管理する
  • 顧客を管理する
  • サプライヤーの管理
  • 買掛金と売掛金の管理
  • など...上記のとおり

WebエリアはオンラインのWebサーバーでホストされています(スクリプトとデータベースはオンラインです)。デスクトップ領域は、ローカルデータベースとローカルスクリプトファイルを使用して、Linuxマシンでローカルにホストされます。

私の質問は、両方のアプリケーションで1つのデータベースのみを維持することは可能ですか?はいの場合、最善の方法を教えてください。

私の技術仕様環境に従ってください

データベース:実際には2つのデータベースが機能しているので、1つだけ保持したいと思います。

オペレーティングシステム:Linux(カーネル2.6.X以降)またはWindows(XP以降)

Webエリアの場合

  • Apache、PHP、Python、Javaスクリプト、シェルスクリプト、MySQL。

デスクトップ領域の場合:

  • PHP-GTK2、Apache、PHP、MySQL、シェルスクリプト。

システムに関する追加情報[編集済み]

デスクトップ環境を作成する主な目的は次のとおりです。

  1. 新しい注文ごとに税金クーポンを印刷して配布する必要があります。
  2. 引き出しがあります。
  3. シリアルリーダー(バーコード)を持っています。
  4. 情報を問い合わせるターミナルがあります。
  5. そして、Web環境で実行するのが不可能ではないにしても、非常に難しい他のいくつかのもの。

デスクトップリレーショナルスキーマ:104テーブル。Webリレーショナルスキーマ:42テーブル。

  1. アクセス許可は、以下に基づいて割り当てられます。デフォルトですべてを拒否し、必要に応じて割り当てます。
  2. (検証/サニタイズ)は、Webアプリケーションですでに行われています。
  3. データベースのすべての会計年度の部分がアーカイブされるため、これまでパフォーマンスは問題ではありません。 (また、顧客、サプライヤー、およびそれらに関するすべての関連データは、3年間使用されなかった後にアーカイブされます)。

私の本当の問題は、今日2つの環境があり、1つだけにすることです。次に、両方の世界を1つに「マージ」することはオプションですが、よくわかりません。私はここでこの問題について多くの考えを読みたいです。

プロセスの観察:今日は稼働しており、正常に動作していますが、プロセスによっては時間の浪費のように感じます。

シナリオを見てください。

  1. 注文はインターネットで行われ、Webデータベースに保存されます。
  2. 「注文」はキッチンに送られ、準備されます。
  3. 領収書(税クーポン)を印刷し、注文書と一緒に入れて、顧客に配達します。
  4. 税クーポンは私のデスクトップ環境によって生成され、注文テーブルへの呼び出しが必要ですが、それはWeb注文テーブルではなくデスクトップ注文テーブルです。

簡単に言うと、税クーポンを埋めるために再度注文を生成する必要があります。同じことが、顧客登録、サプライヤー登録、およびその他のいくつかのものに起こります。

この情報が私の質問をより読みやすくすることを願っています。再度、感謝します!

2
deepcell

短い回答:単一のデータベースを使用すれば、頭痛の種は確実に少なくなります。

そうしないと、使用する可能性のあるすべてのローカルデータベースで、レコードの同期の問題やレコードの重複が発生する可能性があります。

[〜#〜] dal [〜#〜](データアクセスレイヤー) を作成するだけです。クライアントアプリケーション(デスクトップ、ウェン、モバイルなど)がDALを介してデータベースにアクセスできるようにします。

12
Yusubov

可能です。また、メンテナンスや変更を簡単にするために追加する必要があります。

仕様を読んだとおり、MySQLを使用していて軽量で簡単に開始できるため、単一のデータベースを使用して開発する可能性が非常に高くなります。いいえ、MySQLがWebアプリケーション専用であると主張することはできません。多くのアプリケーションには、それを使用している製品とツールのドメインがあります。

直接データベース接続用に設定する必要がある対応する構成があります。ただし、デスクトップアプリケーションはstatic IPでパブリックホストサーバーに接続され、これを実行してデスクトップアプリケーションを使用できます接続を確立します。

また、この面倒な設定をやりたくない場合は、デスクトップ用のWebサービスを使用して、目的のデータベース操作を実行できます。

追加:より良い解析のために、WebサービスがJSONまたはXMLを使用している可能性があります。

注文は両方のデータベースに共通しているようです。その場合、2つのデータベースを同期する必要がないため、1つの共通データベースを使用することは理にかなっています。データに共通点がない場合は、それらを分離してください。

それらを1つのデータベースにまとめる場合は、いくつかのことが必要です。

1)Webおよびデスクトップアプリケーション用に個別のログオンを作成します。これにより、トレースツールを使用して問題をデバッグしやすくなります。各ユーザーがアクセスする必要があるものに従って、アクセス許可を割り当てます。

2)データレイヤーを構築し、ストアドプロシージャを呼び出すことでWebサイトのみがデータベースにアクセスできるようにします-これにより、SQLインジェクション攻撃を防ぐことができます。これはおそらく2つの間の共有ライブラリである可能性があります。

3)パフォーマンスが問題になる場合は、使用頻度の低いテーブルを別の物理ディスクに移動できるようにする必要があります(アカウントテーブルとサプライヤーテーブルを疑っています)。別のスキーマが必要な場合は、設計段階で検討してください。 (権限に関しては、ポイント1と関連付けます)トランザクションテーブルと非トランザクションテーブル。

3
adam f

デスクトップアプリとWebアプリの間で同じデータベースを共有することは有効です。ただし、デスクトップテクノロジ自体が必要な理由はわかりません。ユーザーが異なるが、デスクトップおよびWebベースのアプリケーション環境を使用する必要がない2つの異なる機能グループがあります。通常、データベースをそこに配置する必要がない場合は、データベースをWebから非表示にする利点があります。ただし、多くの場合、アプリケーションのWeb部分に必要な通常のセキュリティ対策を実装した後のリスクを受け入れます。複数の環境を使用することにはいくつかの問題があるため、バッチ処理は別として、質問ではデスクトップ機能が必須である理由として説得力のある要件を示していないと思います。その結果、ケースがないと思います。 2つの異なる環境の場合、リストしたすべての機能をWeb環境で処理できます(詳細が明記されていないバッチ処理を除く)。

2
NoChance

また、アプリケーションが情報にアクセスするための単一のデータベースとWeb APIである3番目のアプローチを検討することもできます。

これにより、SQLServerを外部ソースに直接公開する必要がなくなり、アプリケーションがアクセスするものをより適切に管理できます。

また、デスクトップアプリケーションを毎回再デプロイするよりも、データベース構造の変更に合わせてWeb APIを更新する方が簡単です。

2

確かに可能です。mySQLはデータベースサーバーであり、ローカルでもリモートでも、複数のソースからの接続をサポートするように設計されています。

ただし、通常、mySQLはウェブホストにインストールすると、セキュリティ上の理由からローカル接続のみを許可するように構成されます。リモート接続を有効または無効にする設定が構成ファイルにあります。それに応じてこれを設定する必要があります。

詳細は MySQLデータベースサーバーへのリモートアクセスを有効にする方法 を参照してください。

2
Gavin Coates