database - 我的订单明细表可以只有外键吗?

标签 database database-design foreign-keys composite-primary-key

这是我的 ERD 的一部分: enter image description here

如您所见,Order Details 表中的 OrderID 继承自 Orders 表的 OrderID。仅在产品表中的 ProductID 也是如此。我以为我在某处读到每个表都需要一个主键,但这是异常(exception)吗?

最佳答案

在任何情况下,您的订单明细表都不应仅使用 FKS。这是彻底灾难的秘诀。

订单明细必须记录下单时关于商品的信息。例如,价格随时间变化。您不希望过去的订单价格发生变化,因为价格已经发生变化。

如果不合时宜的价格变动导致客户因未立即发货的商品而意外收取更多费用,这不仅会导致问题,而且会完全破坏您用于报告销售的信息的任何财务完整性,并可能发送不良信息数据到您的会计系统。

订单和订单详情是临时数据。有关订单的所有信息都必须在实际订单发出时进行记录。这不是反规范化,时间数据的处理方式不同。

关于database - 我的订单明细表可以只有外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34316607/

相关文章:

amazon-web-services - DynamoDB 查询按名称排序的所有用户

mysql - 外键的效率如何?

database - Golang worker 池导致数据库损坏

sql - MongoDB 或 CouchDB 或其他?

java - 如何使用 wamp 服务器发送 Spinner 在数据库中选择的值

sql - mysql - 用户项目评级,每个用户 1 个评级,可更新 - 表结构?

mysql - 存储重复字段: good or bad

c# - 尝试删除条目时接收 System.IO.IOException

entity-framework - Entity Framework 中的外键 - 循环或多级联路径错误

c# - Code First Entity Framework 和外键