Sql 关系数据库设计:处理销售收入

Sql 关系数据库设计:处理销售收入,sql,database-design,relational-database,Sql,Database Design,Relational Database,我正在为一个学习项目制作一个在线市场。请原谅我没有图表 我有表卖家和产品,分别包含卖家和产品的数据。一个卖家可以有多个产品。还有一个收据表,用于存储有关客户购买的信息。这是一项重要记录,必须坚持下去。收据应该能够包含所购买物品的信息 但是,产品是动态的,可以添加和删除产品。但是由于收据应该引用产品,这意味着我不应该删除产品行,即使它不再销售 这样做对吗?我可以使用更好的设计模式吗?是的,这是正确的方法。如果您设置了正确的参考完整性,系统将不允许您删除有收据的产品或卖家。下一步要做的是使用标志将产

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

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

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


这样做对吗?我可以使用更好的设计模式吗?

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

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


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

您可能需要阅读“缓慢更改维度类型2”。基本上,每个产品记录也必须有一个有效日期范围(从到)。您永远不会删除产品记录,但每当产品停产时,您必须更新结束日期。通常会在产品表中添加“已删除”或“活动”或“非活动”。谢谢!他们真的很有帮助。我会调查的。我读到了他的建议,它确实很强大。“扩展主键”是什么意思?我知道产品周期通常是“续订”的,ProductId是唯一的密钥,但是如果您添加“from”和“to”日期,您可以有许多具有相同ProductId的记录,表示多个有效期。ProductId不再是唯一的,并且不足以作为主键。