【问题标题】:database, separate table or columns for extra fields?数据库,单独的表或额外字段的列?
【发布时间】:2017-04-22 06:06:56
【问题描述】:

我有Stock 表。

sku
quantity
quantity_sold
price
seller

我有 StockExtra 表用于具有日期/时间属性的产品(您可以考虑活动门票)

stock  # references stock
quantity
quantity_sold
price
date_at
time_at
datetime_rule  # foreign key to another table, it is a rule that describes when events occur 

对于活动门票,我使用 Stock 表中的 stock and seller,但使用 StockExtra 表中的数量。因为不同日期的票可以有不同的数量和价格。

我已经划分了表格,但不确定这是否是最佳做法。

现在我需要创建另一个表来保存不同市场商店的库存数据。
(我正在制作一个系统,当他在多个商店销售产品时,卖家可以管理他的库存)

例如,可以在 amazon.com 和 ebay.com 上销售活动门票。 每个商店的价格,数量可能不同。

所以从StockStoreStock 之间会有一对多的关系。

Stock 将保留所有商店的默认价格和汇总数量/数量。 StoreStock 将保存单个商店的数据。

由于同样的原因,我还需要从 StockExtraStoreStock 的一对多关系,即活动门票的每个日期/时间的价格/数量可能不同。

所以以我目前的设置, 会有StockStockExtraStoreStock

即使日期/时间相关字段对于非票务产品为空,只使用 StockStoreStock 会更好吗?

【问题讨论】:

  • @TimBiegeleisen 我将股票字段添加到 StockExtra。 (我的错误)“你可能把事情复杂化了。”请更具体一点,您是否暗示我应该合并 Stock / StockExtra 表?

标签: database database-design


【解决方案1】:

您应该考虑通过以一致的方式保持所有内容来降低系统的复杂性。将复杂场景与简单场景放在同一张表中。

通过将相同的信息保存在不同的位置(例如Stock vs StockExtra,或Stock vs StoreStock),您正在创造一种情况,您的代码必须有额外的分支才能根据具体情况查找数据情况。

当您为单个事务处理数据时,分支并不是世界末日,尽管需要编写、调试和维护更多代码。但是,当您汇总数据时,将其分布在多个潜在位置会使您的数据检索复杂得多

我建议将所有内容保持在最详细的级别。因此,即使只有一个商店适用于特定情况,一切都在StoreStock 中。然后,除非您有明显的性能问题,否则不要将 StockExtraStock 分开 - 只需在 Stock 中使用可为空的列。

Stock 中保留默认价格是可以的,但为了下一个必须维护您的代码的人,请使用更具描述性的名称。我建议不要在Stock 表中跟踪销售数量。仅将其保存在 StoreStock 中。不要保留预先计算的手头价值。这将不可避免地失控。相反,跟踪添加的数量(收据)和删除的数量(销售)并动态计算现有数量。这将避免库存对账问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2020-05-21
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多