问题标签 [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 投票
1 回答
460 浏览

mysql - MySQL重复外键数据或连接?

我正在考虑处理网站用户和帐户的最佳方法。

每个用户属于一个帐户,帐户可以有多个用户。这些表将是 MyISAM,因此没有 DB 强制引用完整性。每个用户都有权查看/添加/编辑他们自己的内容和/或他们所在帐户的所有用户的内容。

数据库中几乎所有其他表都将引用 User 表。例如。

因此,要获得用户可以访问的产品,假设有权访问他们自己的产品:

要获得用户可以访问整个帐户时可以访问的产品,请执行以下操作:

现在,问题是:在产品、事件等中也有一个 accountId 字段会更好吗?

这将消除对几乎每个使用的查询的额外连接的需要:

用户永远不会从一个帐户移动到另一个帐户,因此 accountId 将始终正确。从站点将使用的 100 多个其他查询中删除这些连接是否值得额外的数据存储要求并失去一些规范化?要考虑的另一件事是用户表不会经常被写入所有内容,因此在执行连接时不太可能出现表锁定问题。

0 投票
1 回答
3598 浏览

sql-server - 在 SQL Server 中自动更新冗余/非规范化数据

在我的数据库设计中使用高级别的冗余、非规范化数据来提高性能。我会经常存储通常需要连接或计算的数据。例如,如果我有一个User表和一个Task表,我会在每个Task记录中冗余地存储UsernameUserDisplayName 。另一个示例是存储聚合,例如将TaskCount存储在User表中。

  • 用户
    • 用户身份
    • 用户名
    • 用户显示名称
    • 任务计数
  • 任务
    • 任务ID
    • 任务名称
    • 用户身份
    • 用户名
    • 用户显示名称

这对性能很有好处,因为应用程序的读取次数比插入、更新或删除操作多得多,而且像用户名这样的一些值很少更改。但是,最大的缺点是必须通过应用程序代码或触发器来强制执行完整性。这对于更新来说可能非常麻烦。

我的问题是这可以在 SQL Server 2005/2010 中自动完成......也许通过持久/永久视图。有人会推荐另一种可能的解决方案或技术吗?我听说 CouchDB 和 MongoDB 等基于文档的数据库可以更有效地处理非规范化数据。

0 投票
1 回答
420 浏览

google-app-engine - Google App Engine 和数据库“视图”

我正在为具有相当复杂的数据模型的 GAE 开发应用程序。

根据我的理解,使用 noSQL 数据库(尤其是 GAE)处理复杂数据模型的一个好方法是使用非规范化的数据“视图”。如果浏览器客户端想要更新一些数据,服务器对一些核心数据执行写入,返回“200 OK”以便客户端可以继续,然后使用任务队列更新写入数据可能影响的任何“视图” .

然后,每当客户端想要查询通常需要 SQL 连接的某些对象时,它可以改为查询“视图”,其中它需要的所有数据都在同一“行”(或实体,在应用引擎的情况下)中)。

我遇到的问题是,所有这些视图的创建和更新似乎都是图书馆应该做的事情,而不是我应该手动做的事情。是否有与 GAE 一起使用的工具,您可以在其中指定数据的某些视图,然后期望它们将被适当地创建和处理?我相信CouchDB会这样做......

0 投票
2 回答
376 浏览

database - 数据库设计,大量参数,非规范化?

给定表tblProject。这有无数的属性。例如,宽度、高度等。几十个。

我正在添加一个新模块,可让您为移动设备的项目指定设置。这是 1-1 的关系,所以所有的移动设置都应该存储在 tblProject 中。但是,列表变得越来越大,属性之间会有一些歧义(IE,我必须在所有移动字段前加上 MOBILE 前缀,这样 Mobile_width 就不会与宽度混淆)。

将移动设置非规范化并将其存储在另一个表中有多糟糕?还是存储设置的更好方法?属性变得笨拙且难以在表中修改/查找。

0 投票
4 回答
846 浏览

php - 问题:编写一个 MySQL 解析器来拆分 JOIN 并将它们作为单独的查询运行(动态非规范化查询)

我试图找出一个脚本来获取 MySQL 查询并将其转换为单独的查询,即动态非规范化查询。

作为测试,我构建了一个包含 4 个表的简单文章系统:

  • 文章
    • article_id
    • article_format_id
    • 文章标题
    • 文章正文
    • 文章日期
  • article_categories
    • article_id
    • 类别ID
  • 类别
    • 类别ID
    • 类别标题
  • 格式
    • format_id
    • 格式标题

一篇文章可以属于多个类别,但只有一种格式。我觉得这是现实生活中的一个很好的例子。

在列出所有文章的类别页面上(也拉入 format_title),这可以通过以下查询轻松实现:

但是,我尝试构建的脚本将接收此查询,对其进行解析并单独运行查询。

所以在这个类别页面示例中,脚本将有效地运行它(动态计算):

这方面的挑战是以正确的顺序制定正确的查询,因为您可以在查询中以任何顺序放置 SELECT 和 JOIN 的列名(这是 MySQL 和其他 SQL 数据库翻译得很好)并制定信息逻辑在 PHP 中。

我目前正在使用SQL_Parser解析查询,该查询在将查询拆分为多维数组时效果很好,但解决上述问题令人头疼。

任何帮助或建议将不胜感激。

0 投票
1 回答
907 浏览

sql - mysql datetime快速结构

对于以下问题,日期时间有多好:比较周一和周四的销售额?

Mysql 在内部将日期时间保留为 unix-timestamp?所以找到星期一将是相当昂贵的。

当引入一个额外的属性“day”并给定一个索引时,有没有人体验过 mysql 的性能有多好?喜欢这个的独立开发者会被使用吗?它只会有7个不同的状态......

0 投票
2 回答
157 浏览

performance - 这些是在 NOSQL 可扩展网站架构中编写不带连接的查询的方法吗?

我一直听说构建可扩展网站的方法之一是不使用连接。既然大多数数据都是相关的,那么您是如何做到这一点的呢?

我有限的研究产生了以下想法:

A) 如果您的数据本质上是关系型的,那么确实使用关系型数据库,即使用正确的工具来完成这项工作。

B) 维护数据的非规范化版本。

C)对于可以强制为非关系的数据,您可以使用 NOSQL。以不需要连接的方式对其进行数据架构。

D)如果您必须关联您的数据,那么应用程序层必须通过逐一获取数据集并手动关联结果来手动实现连接。

E) 由于应用层的手动连接非常慢,因此请尝试离线执行这些操作(而不是在用户等待时)。

F) 使用 Map-Reduce。

这是正确的/还有更多的答案吗?

0 投票
4 回答
317 浏览

time - 数据仓库性能差异非规范化时间

在我读到的书中,如果你将时间分成单独的列,它是一个真正的性能提升器。例如日、月、年等...

  1. 数据库是否已经有一些智能方法来处理时间列上的索引,因此拆分时间并添加数百万个索引变体已经过时了?

  2. 在性能差异方面有任何经验吗?

一个可能的查询是星期一早上 13:00-14:00 点之间的销售。

0 投票
1 回答
1030 浏览

database - Lucene 索引的数据库表的非规范化

我刚开始使用 Lucene,我正在尝试索引数据库,以便可以对内容执行搜索。我对索引感兴趣的表有 3 个:

1. 图像表- 这是一个表,其中每个条目代表一个图像。每张图片都有一个唯一的 ID 和一些其他信息(标题、描述等)。

2. 人员表- 这是一个表,其中每个条目代表一个人。每个人都有一个唯一的 ID 和其他信息,例如(姓名、地址、公司等)

3. 贷记表——该表有3个字段(图像、人物和贷记类型)。它的目的是将一些人与图像相关联,作为该图像的学分。每张图片可以有多个人(有导演、摄影师、道具师等)。此外,一个人在多张图像中都有功劳。

我正在尝试索引这些表,以便可以使用 Lucene 执行一些搜索,但正如我所读到的,我需要展平结构。

我想到的第一个解决方案是为图像/信用人的每个组合创建 Lucene 文档。恐怕这会在索引中创建很多重复的内容(图像/人的所有细节都必须在每个文档中为每个处理图像的人复制)。

有没有使用 Lucene 经验的人可以帮助我解决这个问题?我知道非规范化没有通用的解决方案,这就是为什么我提供了一个更具体的例子。

谢谢,如果有人需要,我很乐意提供有关数据库的更多信息

PS:不幸的是,我没有办法改变数据库的结构(它属于客户端)。我必须使用我所拥有的。

0 投票
4 回答
1055 浏览

c# - MongoDB、C# 和 NoRM + 非规范化

我正在尝试使用 MongoDB、C# 和NoRM来处理一些示例项目,但在这一点上,我很难将我的头脑围绕在数据模型上。用RDBMS的相关数据是没有问题的。然而,在 MongoDB 中,我很难决定如何处理它们。

让我们以 StackOverflow 为例……我完全理解问题页面上的大部分数据都应该包含在一个文档中。标题、问题文本、修订、评论……都在一个文档对象中。

我开始变得模糊的地方是用户数据的问题,如用户名、头像、声誉(变化尤其频繁)......每次用户发生变化时,您是否会非规范化和更新数千条文档记录,或者您是否以某种方式链接数据在一起?

在不导致每次页面加载时发生大量查询的情况下,完成用户关系的最有效方法是什么?我注意到了DbReference<T>NoRM 中的类型,但还没有找到使用它的好方法。如果我有可以为空的可选关系怎么办?

感谢您的洞察力!