【问题标题】:Relational Database design: handling sales receipts关系数据库设计:处理销售收据
【发布时间】:2017-11-28 23:49:04
【问题描述】:

我正在为一个学习项目创建一个在线市场。请原谅我没有图表。

我有表SellerProduct,分别包含有关卖家和产品的数据。一个卖家可以有多个产品。还有一个Receipt 表存储有关客户购买的信息。这是一个重要的记录,必须坚持下去。收据应该能够包含有关所购买物品的信息。

但是,产品是动态的,可以添加和删除产品。但是由于收据应该引用产品,这意味着我不应该删除产品行,即使它不再销售。

这是正确的做法吗?有没有更好的设计模式可以使用?

【问题讨论】:

  • 您可能想了解“缓慢变化的尺寸类型 2”。基本上,每条产品记录还必须有一个有效日期范围(从-到)。您永远不会删除产品记录,但您必须在产品停产时更新结束日期。
  • 在产品表中添加“已删除”或“活动”或“非活动”是很常见的。
  • 谢谢!他们真的很有帮助。我会调查他们。

标签: sql database-design relational-database


【解决方案1】:

是的,这是正确的做法。如果您设置了参照完整性权限,系统将不允许您删除有收据的产品或卖家。接下来要做的是使用标志将产品或卖家标记为已删除或已存档。它可以是布尔值,也可以是指示它何时变为非活动状态的日期。正如 Hellmar Becker 所建议的那样,使用“从”和“到”日期来指示有效时间间隔非常强大,但它打开了一个全新的蠕虫罐:你可以有多个“有效”时期,所以你有扩展您的主键。 像 HANA(来自 SAP)这样的现代数据库不再允许删除,并且具有内置的“已删除”标志。

【讨论】:

  • 我读到了他的建议,它确实很强大。 “扩展主键”是什么意思?我明白产品期限可能会“更新”
  • 通常情况下,ProductId 将是唯一键,但如果添加“from”和“to”日期,则可以有多个具有相同 ProductId 的记录,表示多个有效期间。 ProductId 不再是唯一的,并且不足以作为主键。
【解决方案2】:

这不是一个正确的答案。我只是想给你一张图表的礼物,因为你没有! :)

(免责声明:QuickDatabaseDiagrams 是我的项目)

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2014-02-28
    • 2019-12-15
    • 2021-03-20
    • 1970-01-01
    相关资源
    最近更新 更多