3

こんにちは、e コマース アプリケーションを開発中ですが、製品カタログ用のデータベースの設計に問題があるようです。

スタックオーバーフローに関する他の同様の質問も読みましたが、必要な答えが得られるとは思いません。

要件は次のとおりです。

製品カタログはカテゴリ別に構成する必要があります。各カテゴリには不明な数のサブカテゴリがあり、各サブカテゴリには不明な数の製品があります。

アプリケーションには、カテゴリ、サブカテゴリ、および製品を自由に追加できる機能が必要です。

サブカテゴリは、各製品タイプのプロパティを決定します。

今述べたことを考慮して、例と、私が検討した3つのオプション、およびそれらが良くないと考える理由を提供します.

コンピューターと洗濯機を考えてみましょう: コンピューターのプロパティ - VideoCard , ProcesorType,Memory 洗濯機 -Putere(w) , Maximum Preasure , Water filter

両方の製品は、異なるカテゴリとサブカテゴリに属します: コンピュータ - PC カテゴリ 洗濯機 - エレクトロニクス カテゴリ。

候補 I : ここに画像の説明を入力 この場合、名前や価格などの一般的なものを除くすべての製品プロパティが ProductType に格納されます。追加の列を追加するには、ProductType テーブルを変更する必要があります。また、私が検討したデータへのアクセス方法に関していくつかの問題がありますが、それらはこの質問には関係ないと思います。

候補 II:

ここに画像の説明を入力

この場合、すべての製品タイプには、そのプロパティを含む個別のテーブルがあります。ただし、各製品のデータにアクセスするには、データベースへの個別の呼び出しを作成する必要があり、その結果、多くの手順が繰り返されます。また、開発者がそれを行う必要なしに、アプリケーションに追加の製品、カテゴリ、およびサブカテゴリのタイプを追加できるようにする方法もわかりません。

候補 III:

ここに画像の説明を入力

この場合、すべてのプロパティを FormattedProperties 内のキーと値のペアに格納します。また、モデルであるクラスの名前を className 列に格納します。データにアクセスするときは、リフレクションを使用して特定のクラスをチェックし、両方を使用してオブジェクトを初期化します。

これがうまくいくと確信していますが、フォーマットされたキーと値のペアの文字列にすべてのプロパティを格納することが最善の方法であるとは思いませんし、おそらく良い習慣でもありません。また、リフレクションが非常に遅く、おそらくパフォーマンスが低下することもわかっています。

データベースを設計する際に考慮できる他のより良いオプションはありますか? いくつかの例やリンクをいただければ幸いです。

4

1 に答える 1

5

各製品が正確に 1 つのサブタイプであるサブタイプまたは製品を探しています。

候補 1 は、「階層ごとのテーブル」または TPH と呼ばれます。1 つのテーブルは、すべての異なるサブタイプをキャプチャします。これは、多くのサブタイプで厄介になります: ほんの一握りでしか機能しません

候補 2 は「タイプごとのテーブル」または TPT と呼ばれます。サブタイプごとに 1 つのテーブルがあります。Product テーブルには、ProductID と Discriminator のスーパー キーを使用して、タイプを定義する列 (Discriminator と呼ばれます) があります。繰り返しますが、これは多くのタイプで混乱します。

候補 3 は、ええと、何かと呼ばれます。そして、サブタイプがたくさんある最も簡単な方法です。非効率に見えますが、TPT および TPH 設計のオーバーヘッドがあるため、多くの異なるサブタイプでスケーリングするのに最適です。

個人的には、明確に定義されたいくつかのサブタイプには TPT を使用しますが、多くのサブタイプには 3 番目の設計を使用します。ディスクとメモリが無駄になるため、TPH冗長列は嫌いです(固定長列の場合、NULLの場合でもスペースが割り当てられます)

于 2013-06-24T09:21:03.780 に答える