gpt4 book ai didi

sql - 设计一个包含可能相互矛盾的列的数据库可以吗

转载 作者:太空狗 更新时间:2023-10-30 01:46:30 25 4
gpt4 key购买 nike

假设我正在为一家保险公司设计一个包含以下两个表的数据库:

客户

CustomerID, CustomerName

政策

PolicyID, CustomerID, EffectiveDate, ExpirationDate

如果客户的保单有效期在今天之后,则该客户被视为“有效”。自然地,我希望构建许多查询来过滤掉不活跃的客户,反之亦然。我的争论是是否要向 Customers 表添加一个字段“Active”。

一方面,这将提高我的大量查询的性能,并且看起来更清晰、更易于理解。

另一方面,它必须每天更新。此外,客户是否被视为活跃客户完全取决于政策表中的数据。因此,通过添加“活跃”列,我正在创建一个潜在场景,其中客户被标记为活跃但他的政策数据会认为他不活跃(反之亦然)。换句话说,我正在创建一个数据可能自相矛盾的设计。

这是不好的做法吗?

最佳答案

正如 duskwuff 所说,这是一种常见的做法。

但是,非规范化会产生一些成本 - 您必须想出一种替代方法来使“事件”列保持最新,并且该过程会引入更多代码,因此有可能失败。

一般来说,我强烈建议仅在您知道存在性能问题时才进行反规范化。在您达到数亿条记录之前,Policies 表的附加连接几乎肯定不会对您的系统性能产生可衡量的影响。如果你担心,建立一个测试数据库并使用像 DBMonster 这样的工具用测试数据填充它,并编写你需要的查询;尽可能地优化它们,只有当你不能获得你需要的性能程度时,你才应该考虑去规范化。

关于sql - 设计一个包含可能相互矛盾的列的数据库可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com