dee*_*epz 6 erd database-design
我已经创建了我的实体关系图(为简洁起见为 ERD)并且它具有派生属性。
当谈到使用关系模式进行数据库设计时,我已经设计了我的表并正确链接了所有内容。
我不知道是否应该在我的表中添加一个具有派生属性的列?例如,派生属性计算如下:
Total
= Price * Quantity
它与以下说明性表架构有关:
Customer (
ID,
CustomerName,
ItemsID,
Total
);
Run Code Online (Sandbox Code Playgroud)
应该Total
包括在Customer
表中吗?
您可以做的事情并不总是适合关系模型的各种用途。如果您正在创建数据仓库以分析客户销售额,那么派生属性将是合适的。我已经为报告工具的汇总表完成了这项工作。该查询将加入多达 30 个表,其中包含许多聚合,例如总和,并显示实体具有的所有值。每天更新的汇总表列出派生属性是一个很好的报告解决方案。
对于使用派生属性的在线事务处理数据库而言,并不总是最好的解决方案。
例如:现在你的总价是价格 * 数量
下个月管理层决定对在一个日历年内订购超过 1000 美元的客户实施 10% 的折扣。您的总列现在看起来不灵活。
不幸的是,您今天可以说“永远不会改变”的事情,例如总价 = 价格 * 数量,实际上是业务逻辑的一个示例。业务逻辑可以随时以意想不到的方式发生变化。
继续您的示例....如果管理层制定了折扣并且您有一个客户表和订单表,那么您所要做的就是添加一个折扣表。然后,您可以创建一个视图,该视图封装了当天的业务逻辑以得出总销售额。当逻辑发生变化时,您可以更轻松地更改视图,而不是重新计算表中固定的派生属性。
如果您真的想做好准备,您可以将业务逻辑中的更改存储在数据库的表中,并掩盖“谁、什么、为什么”。因此,如果经理鲍勃提供折扣,五年后新经理苏说:“我们什么时候开始提供折扣,谁授权的?” 你是一个数据库明星。