2009-07-13 12 views
3

注:これを実装するつもりはありません。個別のDB内のユーザーテーブル

ウェブインターフェイスから複数のサービスを利用できるとします。少なくとも2つはユーザー登録と一部のデータをデータベースに必要とします。 1回の登録ですべてのサービスへのアクセスが許可されます。 Google(GMail、Google Docsなど)のように。

登録されたユーザーに関連するこれらのサービスはすべて、単一のデータベース内に配置されていますか、おそらくどのサービスのためのテーブルプレフィックスがありますか?

または、各サービスに独自のデータベースがありますか?私がこれを行うのが見ることができる唯一のプラスは、テーブル名をよりきれいにするということです。ユーザーの操作が必要なときはいつでも、SQLクエリを不必要に複雑にする少なくとも2つの異なるデータベースと対話する必要があります。

これは、「大男」が1つのデータベースのみを使用し、数多くの異なる(おそらくまったく関係のない)テーブルをロードすることを示唆しますか?

+0

これまでの回答は、私が思っていたことに従っていたものの、私が聞いているものに反しています。 – nilamo

答えて

3

正しいDBMSを使用している場合は、両方の戦略を最大限に活用できます。 PostgreSQLでは、 'データベース'内に別々のスキーマを持つことができます。認証サービスは単一のスキーマにアクセスし、他のサービスに他のスキーマのデータの参照として使用されるキーを提供します。あなたはまだ、すなわち、単一のエンティティとして、データベース全体を扱うことができます。別途

  • 店舗、個人を特定できる情報をdblinkを使用せずに、スキーマ全体

    • クエリ(スキーマは、さらにデータを保護するために、別のユーザごとのアクセス権を持つことができます)
    • DBMSはあなたがより複雑なDALのコストでこれらの利点を得るため、外部キー制約(私は信じている)(データ再)一貫
    • バックアップを管理し、

    を復元します(あなたの好きなDALフレームワークではサポートされていないかもしれません)、DBMS間の移植性は低くなります。

  • +0

    それはかなりクールだね。私の経験はすべてSQL ServerやMySQLで起こるので、これをさらに深く検討しなければなりません。 – nilamo

    +1

    これはSQL Server 2005以降でも同様です。 –

    +0

    読んでみると、これは最良の解決策であるように思われます。これは、それぞれ異なるアプローチの最善の部分を取ります。一方では、すべてのテーブルをどのサービスに関連するスキーマにグループ化することができます。これは、きれいで論理的な組織を提供します。一方、このデータは分離されていますが、複数のクエリに頼ることなく、アクセスし相互参照することも簡単です。ありがとう、ダナ。 – nilamo

    3

    複数のサービスを1つのデータベースに依存させることをお勧めします。バックアップからいくつかのサービスを復元する必要がある場合は、すべてを復元する必要があります。 おそらくあまりにもデータベースサーバーをオーバーロードしています。 私は、将来の時点で多くのデータを共有する可能性が高い場合にのみ、そうするでしょう。

    また、共有ユーザーデータのみを使用するより小さいデータベースを検討することもできます。

    +1

    この状況で復元するときにデータの一貫性を保つことは、別の課題です。 –

    3

    私はサービス用に別のデータベースを持つ1人のユーザー/ロールリポジトリを持つことを考えます。

    1

    潜在的にデータベースのオーバーロードとそのアクセスに問題があります。レプリケーションは潜在的な良い解決策の1つです。

    2

    私は決してこれをやったことはありませんが、パフォーマンスに依存すると思います。別のデータベースを実行するオーバーヘッドがほとんどない場合は、それが答えかもしれません。別のDBを使用すると、複数のマシン間でDBを分割することも容易になります。

    複雑さも問題です。うまくいけば、あなたのスキーマは、異なるクエリのためにいくつかの異なるデータベースに浸漬する必要がないような方法で定義されることを望みます。

    1

    いくつかの戦略があります。

    複数のデータベース(または複数のサーバー)に移動すると、操作が複雑になります。あなたのコアユーザ情報は単一のデータベース内にある可能性があります。個々のサービスは他のデータベースに存在する可能性があります。その問題は、データベースが参照整合性の外部単位であるため、データベース間で外部キーを設計できないことです。これを回避する方法の1つは、定期的にデータベースを分離してから、これらのコピーに対してRIを強制するために、変更をコアマスターテーブルに追加することです(追加と更新のみ、外的なキー制約のため削除が禁止されるためです)。サービスデータベース内のコアマスターデータベーステーブルこれは、保守のために他のデータベースがダウンしている間に、サービスデータベースとそのサービスを実行できることを意味します。明らかに、これは、サービスウィンドウの改善とカップリングの削減のためのアーキテクチャの複雑さの増加です。

    私は単一のデータベースから始めることをお勧めします。あなたのRDBMSがそれをサポートしていれば、私はSCHEMAに従ってコンポーネントを編成します。これにより、設計上の論理的分離を少なくとも維持することができます。後で簡単にリファクタリングすることができます。

    多くのデータベースには、無関係とみなせるテーブルがあります。時には、システムでは、ほとんど接続しない複数のエンティティネットワークが存在することがあります。これらの場合でもSCHEMAを使用できます。

    関連する問題