2017-09-22 15 views
1

これはかなり概念的な質問です:概念SQL - 重量あたりのピースとの価格あたりの価格

私はテーブルをデータベースに取り組んで、「製品情報」や「取引を購入」しています - 今、製品情報テーブルそう遠くの機能は「価格」であり、購入取引テーブルは「金額」を特徴とする。

しかし、一部の商品は1個あたりに支払われることが想定されており、一部の商品には1個の重量あたりの価格があります。 今、私は金額に10進値を許可せずにこれについてどうやって行くのか不明です。 重量あたりの価格として処理される予定の商品にフラグを設定し、周囲のプログラムでさらに計算する必要がありますか?これはむしろ実用的ではないように思えます。なぜなら、クエリでの集計はむしろ不可能になるからです。または小数点以下を許可する必要がありますが、フラグを必要とする物事のためにユーザーインターフェースでそれらを禁止しますか? ここで最も賢明なアプローチは何ですか?

基本的に、食料品買い物の領収書と各製品の適切な情報を含むデータベースを想像してください。ユーザはカートの内容を挿入し、プログラムによって総計が計算され、吐き出されるとともに、重量ごとに支払われる各商品の計算された価格も計算される。

質問の愚かさには申し訳ありません。

+0

に見えますそのフラグが設定されていない場合、小数点以下は許可しないでください。 – phroureo

+0

これを示すために、製品にフラグ(またはUOMフィールド)を付けるのが理にかなっています。 DECIMAL型の金額を持つことは合理的です。 UIは、製品のUOMが「ea」であるか、またはweight_flagフィールドが「1」であるか、または使用するロジックが何であれ、整数に制限することができます。集計はまだ 'sum(product.price * transaction.amount)'なので、心配はありません。 – JNevill

+0

私は、ビジネスルールとプログラミングに関する質問であるため、この質問を議論の対象外としています。 –

答えて

1

ここではLedgerSMBについて説明しますが、このソリューションは比較的うまく機能します。

  1. 商品はすべて「単価」で表示されます。アイテムにはユニットあたりの価格とユニット記述子(人間が判読可能)があります。
  2. 1個あたりに販売されるアイテムには、「ピース」の単位があります。 (kg)、 "oz"、 "g"、または "T"のような単位を持ちます。
  3. 販売されている価格と数量は両方とも精度のない数値型です(PostgreSQLでは少なくとも精度限界はありません)。

私たちのテーブル構造は、それが私だった場合、私は小数点量を持っている、との検証のいくつかの種類を持つことができますフラグアイテムおそらくだろう(この質問のために簡略化)は、このような何か

create table parts (
    id serial primary key, 
    sku varchar not null, 
    unit barchar(5) not null, 
    sell_price numeric, 
    last_cost numeric, 
    description text, 
    obsolete bool 
); 
create unique index parts_sku_active_idx on parts(sky) where obsolete is not true; 
関連する問題