2016-12-18 7 views
0

私は会社を追加するアプリケーションがあります。私はこのようなテーブルを持っています:テーブルの列と別のデータベースとの関係を作成する

create table companies(
    id primary key, 
    name varchar 
) 

多くのビジネスタイプの情報を保存する必要があります。彼らは非常に多いので、私は、衝突、非常に遅いパフォーマンスと複雑なクエリを避けるために会社ごとに1つのデータベースを作成することに決めました。データベース名は、私の会社のテーブルの会社名です。

私の問題は、企業名とデータベースに一対一の関係を付けて、互いにシンクしてしまうことです。それは可能ですか?そうでない場合は、企業ごとにデータベースを作成する以外にも優れたアプローチがありますか?

+0

それぞれの会社に別々の 'database'と言うとき、あなたは実際に_table_を意味すると思います。まあ、どちらもうまくスケールされません。代わりに、データを正規化してすべての会社の単一の会社表を持つようにする方法を見つけるべきです。 –

+0

あなたのアプローチは間違っています。データベースは非常に大きなテーブルを扱うことができます。彼らは小さなもの、特に同じ情報を持つものの数々でうまくやっていません。 –

+0

@Tim Biegeleisen私は会社の名前だけを含む会社のテーブルを持っています。しかし、各企業固有のすべての情報は別のデータベースにあります。企業1つにつき1つのデータベース。 – morbidCode

答えて

1

これは私のコメントの精緻化です。

データベースは、数百万行、数十億行のテーブルを処理するように設計されています。私はあなたのデータがそれほど大きくないと推測しています。

なぜ、単一のエンティティのすべてのデータを1つのテーブルに格納したいのですか?いくつかの理由があります:

  • 異なる企業間で簡単にクエリを実行できます。
  • エンティティ間の外部キーの関係を定義できます。
  • データ構造を変更する場合は、1か所で行うことができます。
  • スペースの面ではるかに効率的です。データベースは一般にデータページにデータを格納し、部分的に満たされたページは多くのスペースを消費します。
  • バックアップとリカバリの目的で1つのデータベースがあります。
  • where単一の会社のデータを選択する句は特に複雑ではありません。

(注:これは、「実体」に、データベースの用語を参照している企業のためのデータは、まだ複数のテーブルにまたがることができます)

パフォーマンスを得るために、あなたがして追加し、データモデルを調整することができます索引、およびパーティション表。これは、データベース上で実行される膨大な数のアプリケーションには十分です。

企業/クライアントごとに個別のデータベースが必要な場合があります。私が遭遇したことがあります:

  1. これはあなたがしなければならないことです。
  2. 各クライアントは実際にカスタマイズされているため、共通のデータ構造はほとんどありません。
  3. セキュリティ要件では、データが異なるデータベースまたは異なるサーバーに存在する必要があることが指定されています(これは、1の場合は「正当な理由」です)。
+0

これを確認するには、これはこれらの数百万行の多くの多くのSQLクエリにも当てはまりますか? – morbidCode

+0

@morbidCode。 。 。それはあなたが "多くの"クエリの意味に依存します。データベースは通常、うまく設計されたデータ構造に対する簡単なクエリのために、1秒間に数十または数百のクエリ、さらには数千もの負荷で正常です。 –

関連する問題