概念性SQL - 每件的价格和每重量的价格

时间:2017-09-22 18:04:43

标签: sql database-design

这是一个相当概念化的问题:

我正在开发一个包含“产品信息”和“购买交易”表格的数据库 - 现在产品信息表目前以“价格”为特色,而购买交易表则以“金额”为特色。

但是,有些产品应该按件收费,有些产品的每重量价格。 现在我不确定如何在不允许金额的十进制值的情况下进行此操作。 如果要按照每重量的价格处理产品并且只是在周围的程序中进行进一步的计算,我是否应该有产品标志?这似乎是不切实际的,因为它使查询中的聚合变得相当不可能。或者我应该允许小数但是在用户界面中禁止它们以便逐件购买,再次需要标记? 这里最明智的方法是什么?

基本上想象一个包含杂货购物收据的数据库以及每种产品的适当信息。用户将插入购物车的内容,总计将由计划计算并吐出,以及每个重量支付的每件商品的计算价格。

我对这个问题的愚蠢感到抱歉。

1 个答案:

答案 0 :(得分:1)

以下是我们为LedgerSMB所做的工作,我认为解决方案的效果相对较好。

  1. 项目均以"单位定价。"项目具有每单位价格和单位描述符(人类可读)。
  2. 每件售出的商品的单位为" piece"。每重量出售的物品有一个单位,如" kg"," oz"," g"或" T"
  3. 售出的价格和数量均为未指定精度的数字类型(因此在PostgreSQL中至少没有精度限制)。
  4. 我们的表结构看起来像这样(对于这个问题简化)

    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;