关系数据库-如何决定是存储数据还是计算数据?

布拉德

假设您在数据库中有两个表,一个表用于高尔夫选手,一个表用于高尔夫球洞,以及一个API,该API必须返回诸如球手在其生命中命中的球道之类的东西。最好的方法是让API查看每个孔以计算球道命中数,或者仅将球道命中存储在玩家表中吗?似乎将这些数据存储在players表中基本上是在复制数据,因为它已经存在于每个孔中。但是,为了进行计算,您需要每次都经过玩家玩过的每个孔。

更笼统地说,这仅仅是您需要在正确的数据设计和性能之间取得平衡的情况吗?

我意识到这可能需要一个主观的答案(如果抱歉,那么就很抱歉),但是我对数据库设计的了解还不够,无法确定它们是否是对这种情况的明确答案。

迈克·谢里尔(Mike Sherrill)“猫召回”

更笼统地说,这仅仅是您需要在正确的数据设计和性能之间取得平衡的情况吗?

TL; DR“是”。

关系模型与性能无关。数据关系模型是形式理论;它是许多数据模型之一。

数据模型是一个抽象的,自包含的,逻辑的对象,运营商定义,等等,其一起构成了抽象机与用户进行交互。[1]

抽象机器没有性能问题,因为它在物理意义上不存在。例如,这就是为什么关系模型对索引什么也没说。

另一方面,SQL数据库与性能很大关系。SQL数据库具有物理实现,其性能受内核数影响。内存量;磁盘空间,配置和主轴速度;并发用户数;指标; 等等。

区别在于逻辑与物理之间,抽象与具体之间以及原理与实践之间的差异。

因此,是的,您需要在简洁的设计与性能之间取得平衡。每个人都这样。

最好的方法是“首先进行干净的逻辑(即关系)设计,然后作为一个单独的后续步骤,将该逻辑设计映射到目标DMBS碰巧支持的任何物理结构中。” [2]

如果必须存储计算结果,则最佳实践是使SQL DBMS保持一致性。例如,如果必须存储的结果(quantity * price) + sales_tax,则编写CHECK()约束以确保一致性。一些DBMS不支持CHECK()约束。

如果必须跨许多行维护计数(计数),请使用实例化视图。一些DBMS不支持实例化视图。

在最坏的情况下,您只能使用一个人阅读的报告来确定是否导致了不一致性。该人会采取纠正措施。

在所有情况下,请在进行更改之前和之后评估代表性的INSERT,UPDATE和DELETE语句的性能。

最好的方法是让API查看每个孔以计算球道命中数,或者仅将球道命中存储在玩家表中吗?

有很多统计数据。可能应该将统计信息存储在一个或多个其他表中。SQL DBMS不必“查看每个漏洞”。他们按集操作。

但是,为了进行计算,您需要每次都经过玩家玩过的每个孔。

不,您不需要“遍历每个孔”,至少不需要遍历每个孔,尽管这正是许多前端应用程序框架所做的。您只需要一个SQL查询,例如select count(*) from player_holes where fairway_hit = True;


[1] 《数据库系统简介》 ,第7版,CJ Date,第14页

[2]同上,第327页。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel关系数据库连接

来自分类Dev

使用关系数据库

来自分类Dev

关系数据库组织

来自分类Dev

关系数据库(外键)

来自分类Dev

ERD映射-关系数据库

来自分类Dev

Ruby中的关系数据库

来自分类Dev

关系数据库:变量字段

来自分类Dev

关系数据库查询失败

来自分类Dev

关系数据库结构要求

来自分类Dev

对象关系数据库主键

来自分类Dev

SQL 关系数据库:数据操作和计算

来自分类Dev

MySql | 在性能方面关系数据库与非关系数据库

来自分类Dev

关系数据库与对象关系数据库

来自分类Dev

关系数据库架构-关系和外键

来自分类Dev

关系数据库实例与关系实例?

来自分类Dev

关系数据库 SQL:父/子关系

来自分类Dev

用于度量存储的关系数据库模式设计

来自分类Dev

关系数据库与R / Python数据框架

来自分类Dev

在Django中跨数据库“匹配” /关系数据

来自分类Dev

将数据从关系数据库迁移到NoSQL

来自分类Dev

标记数据库的关系数据的优势

来自分类Dev

从Codeigniter中的关系数据库中获取数据

来自分类Dev

分层数据的关系数据库设计?

来自分类Dev

如何实现简单的关系数据库?

来自分类Dev

如何避免在关系数据库中使用数组?

来自分类Dev

如何引用关系数据库中的记录组?

来自分类Dev

如何描述关系数据库中的性能问题?

来自分类Dev

您如何解决关系数据库悖论?

来自分类Dev

如何检查关系数据库中的多个条目?