Gam*_*mbo 6 mysql database-design
我们的应用程序中需要存储引用以供以后访问.
示例:用户可以一次提交发票,并且应该随时间存储此发票包含的所有参考(客户地址,计算的金额,产品描述)和计算.
我们需要以某种方式保留引用,但如果产品名称改变了怎么办?因此,某种程度上我们需要复制所有内容,以便以后记录,不会受到未来变化的影响.即使删除了产品,也需要在存储发票时进行审核.
这里有关数据库设计的最佳实践是什么?甚至最灵活的方法是什么,例如当用户想要稍后编辑发票并从数据库恢复时?
谢谢!
Bra*_*vic 10
这是一种方法:

从本质上讲,我们从不修改或删除现有数据.我们通过创建新版本来"修改"它.我们通过设置DELETED标志来"删除"它.
例如:
注意事项:
该模型使用了大量的识别关系.这导致"胖"外键并且可能有点存储问题,因为MySQL不支持前沿索引压缩(不像Oracle),但另一方面InnoDB 总是将数据聚集在PK上聚类可以有益于性能.此外,JOINs不太必要.
具有非标识关系和代理键的等效模型如下所示:
