问题标签 [denormalization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3557 浏览

mysql - 关于地址、城市、国家数据的规范化问题

我目前有 3 个表格存储有关世界上所有主要城市、与这些国家/地区对应的每个地区/州以及这些州/地区中的每个城市的信息。

城市、州和国家

现在我的数据库中有大约 6 个其他表,例如需要完全相同的 5 列的用户或组织表:地址、郊区、城市、州/地区、国家。因此,我想知道使用存储这 5 条信息的“位置”表是否是“好的”规范化做法,然后用户或组织表将有一个 location_id 可以参考。

带有位置表的城市、州和国家/地区

好主意还是坏主意?我还在考虑以相同的原则使用“联系人”表,该表将包含 home_phone、business_phone、mobile_phone、email_address,而不是在 6 个表中的每一个中都有相同的 5 列。

任何建议表示赞赏。非常感谢!

0 投票
3 回答
25690 浏览

python - Django:如何在 post_save 信号中访问原始(未修改)实例

我想进行数据非规范化以获得更好的性能,并将我的博客文章收到的投票总和放入 Post 模型中:

当然,我需要保持Post.rating实际价值。通常我会为此使用数据库触发器,但现在我决定发出post_save信号(以减少数据库处理时间):

如何在保存之前访问实例值?在数据库触发器中,我会对此进行OLD预定NEW义,但是在 post_save 信号中有类似的东西吗?

更新

基于马克的答案的解决方案:

0 投票
1 回答
74 浏览

database-design - 非规范化模式的“标准名称”是什么?

我有兴趣了解两种数据库设计模式的标准名称,或者如果您是纯粹主义者,则可能是“问题”:

您如何称呼这些情况/非规范化?我正在为自己使用“镜像属性”和“轻弹外键”,但我相信没有人会理解我:)。无论如何,情况很简单:

1)我们在“父子”关系中有两个实体,在子实体中不仅有外键属性,还有父实体的一些其他“备份”属性。在这种情况下,您不仅在地址实体中有 streetId,而且还有 streetName 来支持街道列表中不存在街道的情况(或者更常见的是遗留数据)。

2)子实体包含由两个字段组成的“外键”:一个标识“父表”,另一个是“父表中的键值”。这意味着首先解释,过滤它,我们知道应该加入哪个表。当然,这种关系的一致性并没有在 dbms 级别上保持,但这仍然是我在实践中有时会看到的那种“父子关系”。

0 投票
2 回答
557 浏览

sql - DDL 定义非规范化规则?

多年来我一直在做关系数据库的事情,但最近已经进入 Cassandra/Redis 领域。NoSQL 对于我们正在做的事情是有意义的,所以这很好。

今天在定义 Cassandra 列族时,我想到了一个问题:在关系数据库中,为什么 DDL 不让我们以数据库引擎本身可以本地管理由此产生的一致性问题的方式定义非规范化规则。换句话说,当关系数据库程序员通过非规范化来实现性能目标时……为什么他/她要通过专门编写的 SQL 来保持一致性?

也许我缺少一些明显的东西?这样的建议是否有一些愚蠢的原因,因为在我看来,拥有这种能力可能非常有用。

编辑:

感谢到目前为止的反馈。我仍然觉得我手上有一个悬而未决的问题(也许是因为它表达得不好)。我了解物化视图试图为非规范化数据提供引擎管理的一致性。但是,我的理解是它们不会随着基础表的更改而立即更新。如果这是真的,这意味着引擎真的不是管理由非规范化引起的一致性问题......至少不是在写入时。我的意思是,当需要针对复杂的关系模型扩展具有繁重读取负载的系统时,没有真正的、功能丰富的、引擎管理的非规范化的规范化数据结构会阻碍关系数据库引擎。我认为调整物化视图刷新率确实等同于 Cassandra 等 NoSQL 引擎提供的可调“最终一致性”。我需要了解引擎如何有效地同步其物化视图。为了相对于 NoSQL 选项被认为是可行的,同步视图所需的时间需要随着添加/更新的行数线性增加。

无论如何,我会再考虑一下并重新编辑。希望有一些想象中的 DDL 的代表性例子。

0 投票
4 回答
1747 浏览

sql-server - 如何定期重建经常访问的报表?

刷新准备好的报告表大约需要 5-10 分钟。我们希望不断刷新这个表(可能每 15 分钟一次或连续刷新一次)。

我们非常频繁地查询这个报告表(每分钟很多次),我无法长时间保持它。如果数据是 15 分钟前的,那没关系。

我不能删除表并重新创建它。我无法删除表的内容并重新创建它。

有没有我应该使用的技术,比如在两个表之间交换(在我们构建另一个表时从一个表中读取)或者我是否将这个 5-10 分钟的过程放在一个大事务中?

0 投票
1 回答
647 浏览

java - 是否可以使用 Hibernate 插入非规范化 bean?

我有一个像这样的豆子:

假设一个标准的休眠配置配置,我可能会得到一些插入,比如

进而

是否有可能如果我有一个非规范化表,我可以插入一个存储两个实体的普通表,例如:

0 投票
2 回答
8479 浏览

sql - 对多个表的唯一约束

假设我们有这些表:

p>

是否可以创建一个唯一约束,以使最多一个引用Child中的所有行都具有某个值?换一种说法,我可以创建一个唯一约束,以便上述表的连接没有重复吗?我不认为——我能找到的每个数据库的语法似乎都与每个约束绑定到一个表——但这可能是我缺乏想象力。(当然,反规范化以包含在其中是一种解决方案。)ChildParentaIdaIdaIdChild

0 投票
1 回答
169 浏览

sql - 关于非规范化。我怎样才能使这个查询更短或更好?(SQL 服务器 2000)

0 投票
2 回答
1657 浏览

mysql - 更新非规范化数据库表

我正在使用 Ruby on Rails 3.0.7 和 MySQL 5。在我的应用程序中,我有两个数据库表,比如 TABLE1 和 TABLE2,出于性能原因,我对 TABLE2 中的一些数据进行了非规范化处理,以便在该表中重复 TABLE1 的值。现在,在 TABLE1 中,我需要更新其中一些涉及的值,当然,我还必须正确更新 TABLE2 中的非规范化值。

我可以做些什么来以高效的方式更新这些值?也就是说,如果 TABLE2 包含很多值(1.000.000 或更多),那么保持更新两个表(技术、实践……)的最佳方法是什么?

在更新数据库表期间会发生什么?例如,用户在访问一些涉及这些非规范化值的网站页面时可能会遇到一些问题?如果是这样,这些是什么,我该如何处理这种情况?

0 投票
2 回答
79 浏览

mysql - 在查询中排除非规范化日期之上的所有内容

我对我的数据进行了非规范化(因此日期被拆分为年、月、日和小时列)但现在我想知道如何查询某个日期之前的所有内容。

这不起作用:

这实际上不会像我想要的那样将所有记录“分组”在一起,从而导致日期(例如)总是从 0 小时到 1 小时。