私は、営業チームが迅速なジョブ見積もりツールとして使用するデータベースを設計しています。デザインの特定の側面についてフィードバックをお願いします。
見積もりは基本的に、事前に定義された「アセンブリ」のリストを選択して、それぞれが合意された価格で作成されます。メインフォームの簡略表示は次のようになります。
+------------ --- ---+
| Assembly options |
+------------+------------+----------+------------+---+---+---+ --- +--+
| assembly ▼ | unit cost | quantity | total cost | 1 | 2 | 3 | |50|
+------------+------------+----------+------------+---+---+---+ --- +--+
| VSD55 | £10'000 | 2 | £25'500 | 1 | 1 | | | |
| RDOL2.2 | £2'000 | 1 | £1'500 | | 1 | | | |
| DOL5.0 | £1'000 | 1 | £1'200 | | | 1 | | |
+------------+------------+----------+------------+---+---+---+ --- +--+
ユーザーは事前定義されたアセンブリを選択し、数量を入力して、必要な「オプション」を選択します。各アセンブリには、最大で50の使用可能なオプションがあります。オプションは、独自の価格を持つ事前定義されたアセンブリ(サブアセンブリ)でもあります。各ラインの「総コスト」は、(メインアセンブリコスト*数量)+オプションのコストとして計算されます。
ユーザーがカーソルをオプションボックスに移動すると、そのオプションの名前と価格がユーザーに通知されます。
ここが複雑になるところです。各アセンブリには、使用可能なオプションの独自のリストがあります。つまり、「VSD55」のオプション1は、DOL5.0のオプション1とは異なるサブアセンブリを表します。
アセンブリがここに行く限り、私が使用している簡略化されたテーブルがあります:
+-----------------+ +------------------------+ +-----------------------------+
| assembly | | assembly_option | | assembly_option_link |
+-----------------+ +------------------------+ +-----------------------------+
| assembly_id (PK)| | assembly_option_id (PK)| | assembly_option_link_id (PK)|
| assembly_name | | assembly_option_name | | assembly_id (FK) |
| unit_cost | | option_number | | assembly_option_id (FK) |
+-----------------+ | unit_cost | +-----------------------------+
+------------------------+
テーブル 'assembly_option_link'は基本的に、各アセンブリで使用できるオプションを定義します。
次に、「quote」テーブルについて:
+-----------------+ +------------------------+
| quote | | quote_assembly |
+-----------------+ +------------------------+
| quote_id (PK) | | quote_assembly_id (PK) |
| quote_name | | assembly_id (FK) |
+-----------------+ | quantity |
+------------------------+
ここでトリッキーな部分は、選択したオプションを保存する方法です。これは正規化ルールに違反していますが、「quote_assembly」テーブルを50個のオプションフィールドすべてで拡張する必要があります。アセンブリは50のオプションすべてで選択されることはないため、これも非常に非効率的です。プラス面として、このソリューションでは、ユーザー入力フォームをテーブルに直接マップして、コーディングを簡単にすることができます。
「正規化された」解決策は、次のような別のテーブルを作成することだと思います。
+------------------------------+
| quote_assembly_option |
+------------------------------+
| quote_assembly_option_id (PK)|
| quote_assembly_id (FK) |
| assembly_option_id (FK) |
| quantity |
+------------------------------+
このソリューションは、選択されたオプションのみが保存されることを意味します。また、option_numberを保存するのではなく、実際の 'assembly_option_id'を保存できます。これにより、アセンブリオプションコストを検索するために「option_number」と「assembly_option_id」を変換する必要がないため、合計見積もりコストの計算がより簡単になります。ただし、このソリューションの主な欠点は、ユーザー入力フォームにうまく対応できないことです。フォームとテーブルのインターフェースをとるために、いくつかの凝ったコーディングを適用する必要があると思います。
誰かがここで設計アドバイスを提供できますか?私は自分自身を十分に説明したことを願っています。
MORE INFO
ザはまた、本体の下に別の行項目として、任意の選択されたオプションを拡張詳細引用レポートです。例えば:
+---------------------------------+------------+----------+------------+
| assembly | unit cost | quantity | total cost |
+---------------------------------+------------+----------+------------+
| VSD55 | £10'000 | 2 | £20'000 |
| - Seal leak protection | £ 5'000 | 1 | £ 5'000 | <-option 1
| - Motor over temp protection | £ 500 | 1 | £ 500 | <-option 2
+---------------------------------+------------+----------+------------+
| | | | £25'500 |
+---------------------------------+------------+----------+------------+