gpt4 book ai didi

database-design - 为了避免一些复杂的查询而重复数据库中的字段是不好的设计实践吗?

转载 作者:行者123 更新时间:2023-12-02 01:20:29 26 4
gpt4 key购买 nike

如果您有一些连接表,其中包含您需要的所有信息,但它涉及一些复杂的连接等。在您选择的表中添加一个额外的字段来节省这些额外的查询会更好吗?

提前致谢

保罗

最佳答案

是和否。

这是故意违背数据库规范化原则的,因此被称为“非规范化”。

它的缺点几乎是我们标准化的所有原因,最值得注意的是它引入了一种错误可能使数据库与其自身不一致的方式。因此,总的来说,这是糟糕的数据库设计。实际上,它还使数据库的更新变得更加复杂,因此更加昂贵(假设没有错误)。

尽管如此,它可以为某些查询带来性能优势,这就是始终超时和微不足道之间的区别。因此,这是一种合理的、有时甚至是必要的优化。

我喜欢采取以下方法:

  1. 仔细想想它的必要性。特别是,CTE 使我不再需要在某些情况下使用此技术,因为 CTE 可以完成过去需要多次表查找的操作(事实上,在我过去使用过的大多数情况下) 。有时,真正需要的只是彻底检查所涉及的指数。最后,值得尝试的是通过使用这种非规范化而优化的查询,而不是时不时地使用它;各种改变都可以消除它的需要。

  2. 为相关数据创建一个单独的表,将其视为“查找”,不将其视为主要设计的一部分,向其他开发人员强调这是一种优化,而不仅仅是糟糕的数据库设计。如果错误导致上述那种不一致,这也使得重建整个事情变得更容易。

  3. 使用触发器来维护表,这样对其所依赖的表的更新将自动保持正确,而不必在更新时引入有关维护它的特殊规则(这些规则几乎肯定会被打破,或者至少会导致代码不太清晰)。

关于database-design - 为了避免一些复杂的查询而重复数据库中的字段是不好的设计实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456831/

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