加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 设计一个可能相互矛盾的列的数据库是否可以

发布时间:2020-12-12 06:54:44 所属栏目:MsSql教程 来源:网络整理
导读:假设我正在为一家保险公司设计一个数据库,其中包含以下两个表: 顾客 CustomerID,CustomerName 政策 PolicyID,CustomerID,EffectiveDate,ExpirationDate 如果客户的策略使得策略的到期日期在今天之后,则该客户被视为“活动”.当然,我希望构建许多查询来过滤掉
假设我正在为一家保险公司设计一个数据库,其中包含以下两个表:

顾客

CustomerID,CustomerName

政策

PolicyID,CustomerID,EffectiveDate,ExpirationDate

如果客户的策略使得策略的到期日期在今天之后,则该客户被视为“活动”.当然,我希望构建许多查询来过滤掉不活跃的客户,反之亦然.我的争论是在“客户”表中添加“活动”字段.

一方面,这将提高我的一堆查询的性能,它看起来更清晰,更容易理解.

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

这是不好的做法吗?

解决方法

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

但是,非规范化有一些成本 – 您必须提出另一种方法来使“活动”列保持最新,并且该过程将引入更多代码,从而导致失败的机会.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读