2009-06-09 8 views
1

データセットで使用されるテーブルの数に関するベストプラクティスはありますか?リレーショナルデータベースでは、最終的にすべてのテーブルが関連するため、データセットを作成するときにどのように具体的に、あるいは幅広く対応する必要がありますか?データセット内のテーブル。数量と冗長性

例:商品オーダーのデータセットがある場合は、商品テーブルと、オーダーが属するcustomersテーブル、配送情報テーブルなどを含める必要があります。または、単に私は基本的なproductordersテーブルと関連するルックアップテーブルを持っている必要がありますか?

答えて

3

データセットを必要なだけ大きくすることをお勧めします。まれに使用されることのない無関係の情報がたくさん含まれている場合は、必要以上に多くのリソースに課税されることになります。

1

「私も含める必要があります...または私は単純にすべきである」

は、あなたのユースケースは何ですか?人々はあなたのデータで何をしますか?これは問題のドメインを定義します。どのデータが存在しなければならないかを正確に定義します。

この読み:http://www.ibm.com/developerworks/web/library/wa-dbdsgn1.html

追加の注意事項を。

まず、問題のドメイン内の実際のものそれぞれにテーブルをマップする必要があります。ユーザーに何をしているのか、どのような決定を下したのか、どのような行動をとるのか、ユーザーに尋ねるこれは現実のものがテーブルを必要とするものを定義します。

オーダーは物です。注文された製品はものです。顧客はものです。

第2 - リレーショナルモデルを機能させるには、繰り返し要素がテーブルの行になるように正規化する必要があります。また、これを正規化して、各行がその行にある別のものの識別子(「キー」)を持つようにする必要があります。また、導出可能なデータを削除するには、これを正規化する必要があります。

注文の行は、注文に関連するものです。

商品の特徴は、商品全体に関連するものです。

この「正規化」プロセスは、リレーショナルデータベースを定義するための正確で完全なルールを提供します。問題のドメインで実際のものを表現するために必要なテーブルの数を正確に示します。

+0

私はこの回答に1票しかつきません。 –

0

使用/論理領域に基づいて分割します いくつかのテーブルを一緒に使用する場合は、一緒に使用してください。 一部のデータが参照データのみの場合は、別のデータセットに移動する必要があります。オーダーを処理する場合は、必要なものだけをロードします。

とにかく、ORMなどのより便利なデータアクセス方法を見てみたいと思いますか? NHibernateを見て、それがあなたのシナリオに合っているかどうかを調べてみてください...

1

私はそれがベストプラクティスかどうかは言えませんが、私が働く場所では、75を超えるテーブルを持つデータセットがあります。いくつかのテーブルはほんの数個のレコードですが、いくつかは数千ものレコードを持っています。これらのテーブルを転送するには、バイナリリモーティングを使用しています。 xmlのシリアライゼーションが私たちに同じ(あるいはそれに近い)パフォーマンスを与えるかどうかはわかりません。私がディスクにシリアライズした最大のデータセットのサイズを最後に確認したとき、それは3MB近くでした。

誰もが大規模なデータセットでの経験はありますか?私たちのプロジェクトが始まったとき、私はそれほど多くのデータを1つのデータセットにまとめる必要があるとは想像もしませんでしたので、私は結果に非常に満足しています。

+0

私はこの環境で実際に働き、私はこの声明を保証することができます。私たちのデータセットは非常によく機能します。私の見解では、私はウェブサイト上で作業していますが、データのほとんどすべてを読み取るために1つの非常に大きなキャッシュデータセットを使用しています。スピードはかなり驚異的です。しかし、これは極端なシナリオです。 「ベストプラクティス」については、ベストプラクティスは、うまく動作し、維持しやすいものです。この昼夜を問わず人々が激しく吹くのを聞くことができますが、結局はそれが機能し、維持可能であることが重要です。 –

0

私は別のデータセットでモデルを分割するために使用しました。
しかし、これは私をかなり数回噛んでいます。
異なるデータセットのテーブル間にリレーション/リファレンスがあったとき、私はたくさんの "フィックスアップ"コードを書く必要がありました。

1つの大きなデータセットの唯一の2つの問題は、設計がより遅くなり、オブジェクトのインスタンス化が遅くなることです。 (数ms)

私は作業単位1つのデータセットを使用しているので、2番目の問題はありません。