【问题标题】:Table with Non Identifying Keys带有非识别键的表
【发布时间】:2012-11-22 21:11:20
【问题描述】:

我的公司正在使用这种模式来管理库存

Model 1 http://img534.imageshack.us/img534/6024/modeltest2.jpg

但是我遇到了问题,因为这个月我们在同一个仓库买了一些不同价格、不同保质期的塑料袋。

所以现在我把模型改成了这个。

Model 1 http://img16.imageshack.us/img16/8416/modeltest.jpg

我的问题是这是否可行.. 它可以正常工作,但这是我第一次创建没有主键的表。

数据示例:

PRODUCT        WAREHOUSE   Quantity   Price  Expiration_Date
PLASTIC BAG    NEW YORK    20         1.20$  12-10-2013
PLASTIC BAG    NEW YORK    130        1.50$  21-12-2015

谢谢

【问题讨论】:

    标签: mysql database-design database-schema


    【解决方案1】:

    基本上没问题。在销售、仓库系统中,您不能在产品表中保存所有具有不同到期日期的产品,因为每个产品都会有很多记录。但通常您需要将它们保存在“Item_Ledger_Entry”表中,该表将是所有销售或采购交易。

    您使用相同的产品,只是过期日期不同。我认为你根本不需要Product has warehouseKey中的Priamrey Key

    【讨论】:

    • 我在此库存中添加价格,因为他们需要一份有价值的库存报告...所以我需要每个数量的具体价格。而这个仓库供应给生产部门,然后用来计算过程的最终成本。在这种情况下,您认为同样的方法可行吗?
    • 您在 Navision 中所做的一切都正确无误。 PrimaryKey 对你来说根本不重要,我知道你只需要将Product has warehouseKey 与产品和仓库连接起来,然后在报告中获取每个产品的特定成本和价格。您可以在没有 PrimaryKey 的情况下做到这一点。在Product has warehouseKey 中使用 Quantyti 和 Price 的逻辑非常好。
    【解决方案2】:

    其中一个问题,特定于 MySQL 和 InnoDB 存储,是 InnoDB 将在内部静默创建一个额外的 6 字节整数作为代理主键。此外,如果您可以通过主键执行查询,则对任何 InnoDB 表的查询效率会更高。因此,如果可能,定义主键(或唯一键)对您有利。

    如果 Product_ID、Warehouse_ID 列的组合不足以唯一标识每一行,那么您可以添加第三列来区分重复项。例如,Stock_ID 之类的。

    【讨论】:

    • 如果我添加第三列来区分我将不得不添加价格和到期日期,这将是 4 的复合键。这就是我试图寻找其他方法的原因......你认为 4 的复合键会更好用吗??
    • 我的意思是添加一个 new 列作为主键中的第三个。用于标识该行代表哪一批库存的某些列。
    • 好的,我明白了。我现在要试试。
    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2020-10-03
    • 2012-02-21
    • 1970-01-01
    • 2012-04-02
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多