1

スケーラビリティの観点から、スキーマ設計のより効率的な方法は何ですか?

データベースに複数のユーザーがいて、各ユーザーがオブジェクト (長いテキスト、日付、および一意の ID で構成される) を持っている場合、(1) それぞれがユーザー列を持つオブジェクトの大量テーブルを作成する方が効率的ですか?または(2)各ユーザーのオブジェクトの個別のテーブルを作成しますか?

データベースの正規化では、ユーザーごとに個別の列を作成するように言われていますが、いくつかの投稿では、質量テーブルを使用することでパフォーマンスが向上すると述べています。

編集:明確にするために「要素」を「オブジェクト」に変更しました。

4

2 に答える 2

2

一般に、エンティティ用に 1 つのテーブルを作成し、それらをユーザー用に個別のテーブルに分割しないようにします。

これにより、システムの保守性が向上します。システム上のクエリは、すべてのアプリケーションで一貫しています。また、データベースがアクセス用に最適化されるようにデータを構造化します。

ユーザー データを個別のテーブルや個別のデータベースに分割する特殊なケースがいくつかあります。これはユーザーの要件である可能性があります (「私たちのデータは他の誰とも混在できません」)。さまざまなバックアップおよびセキュリティ ポリシーをサポートするために必要になる場合があります。ただし、一般的なアプローチは、ユーザーではなく、エンティティを中心にテーブルを設計することです。

于 2013-02-08T18:45:12.283 に答える
1

ユーザーを識別するための列を持つ単一のテーブルを持つことは、適切なリレーショナル設計です。ユーザーを追加するときにテーブルを追加しなければならないというのは非常に怪しげに聞こえますが、大量のユーザーがいると問題が発生する可能性があります。

単一のテーブルが大きくなりすぎると、ほとんどのデータベース製品はいわゆるパーティショニングをサポートします。これにより、いくつかの基準に基づいて、単一の論理テーブルをディスク上の複数の物理テーブルに分割できます (たとえば、例にとどまるために、3 つの物理テーブルを持つことができます)。パーティション 1 ではユーザー ID 1 から 99999、パーティション 2 では 100000 から 199999、パーティション 3 では 200000 から 299999 のデータ)。

Oracleの概要は次のとおりです。

于 2013-02-08T19:47:06.900 に答える