问题标签 [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.
normalization - 为什么在 InfoCube 中对维度表进行非规范化?
我正在工作中学习 SAP BW。SAP 类材料指出,在 InfoCubes 中,维度是非规范化的。我了解规范化表的好处,但不明白为什么维度会被非规范化。
mysql - MySQL 中更新表的非规范化加权聚合
这次我有一个更普遍的问题。如果原始数据定期更新,我应该使用多个视图而不是存储过程来进行数据加权聚合吗?
基本上我有一个本地 MySQL 数据库,它通过从更大的事务数据库中导入相同类型的数据(表)来定期更新。
本地数据库用于统计分析。因此,我在本地对数据进行去规范化(基本上是聚合),以便与统计软件包一起使用。到目前为止,我使用了存储过程,因为我觉得当加权方案(基本上是其他包含与变量相乘的权重的表)发挥作用时,它更容易处理(并且安排得更清楚)。
尽管存储过程的缺点是,当表中填充了新数据时,我会再次运行所有这些程序。显然我不是 DBA ......所以不要回避陈述显而易见的事情 :) 处理这种情况的最佳方法是什么?SP 还是意见?还是完全不同的东西?
thx 提前提出任何建议!
database - 在这种情况下我应该进行反规范化吗?
情况如下:
[职位]属于一个[职位类别],其中[职位类别]属于一个[行业]
所以,我最初的设计是这样的:一个 Job 有一个 fk 来找到 Job Category,一个 Job Category 有一个 fk 来引用 Industry。但问题是当我想知道这个职位属于哪个行业时,我需要找到职位类别,并根据职位类别id,回顾行业表。所以,我正在考虑进行非规范化。
但是我有两种方法可以做到这一点,我在想哪种方法更好。首先,在同一个地方(工作表)记录所有的东西,包括工作类别、行业。
另一种做法是Job仍然引用Job Category,但是Job Category有一个字段来存储行业信息。
您认为哪种方法更好?谢谢你。
mysql - 评分系统查询
我在 MySQL 中为电影建立了一个评级系统,但问题是,当我的查询汇总所有评级并对其进行划分时,它可能必须汇总数百万条记录。
我想到的一种解决方案是基本上将评分缓存在 memcached 中,并且只对不经常使用的项目进行评分操作。然而即使那样,对于那些没有被很多评价的电影,如果有人去检查评分,如果它必须计算很多行,查询可能需要很长时间。
我想到的另一个解决方案是构建一个不断更新表的临时表,但是如果电影的评分很高并且有人试图访问它怎么办,我相信 INNODB 确实行锁定,所以这会导致死锁或从长远来看?
google-app-engine - 我应该对属性进行非规范化以减少 App Engine 所需的索引数量吗?
我的一个查询可以根据用户输入采用许多不同的过滤器和排序顺序。这会生成一个包含 50 多个索引的巨大 index.yaml 文件。
我正在考虑将我的许多布尔和多选(字符串)属性非规范化为单个字符串列表属性。这样,我将减少查询组合的数量,因为大多数查询将简单地向字符串列表属性添加一个过滤器,并且我的索引计数应该会大大减少。
它肯定会增加我的存储大小,但这并不是真正的问题,因为我不会有那么多数据。
这听起来是个好主意,还是这种方法有任何其他缺点?
mongodb - Storing Embedded Comments vs. Avoiding overhead in MongoDB
Let me explain my problem, and hopefully someone can offer some good advice.
I am currently working on a web-app that stores information and meta-data for a large amount of applications. For each application there could be anywhere from 10 to 100's of comments that are tied to the application and an application version id. I am using MongoDB because of a need for easy future scalability and speed. I have read that comments should be embedded in a collection for read performance reasons, but I'm not sure that this works in my case. I read on another post:
In general, if you need to work with a given data set on its own, make it a collection.
By: @kb
In my case however I don't need to work on the collection by themselves. Let me explain further. I will have a table of apps (that can be filtered) and will dynamically load entries as you scroll, or filter, through the list of apps. If I embed the comments within the application collection, I am sending ALL the comments when I dynamically load the application entry into the table. However, I would like to do "lazy loading" in that I only want to load the comments when the user requests to see them (by clicking on the entry in the table).
As an example, my table might look like the following
My question is what would be more efficient? Are reads fast enough on MongoDB that it really doesn't matter that I am pulling all the comments with each application? If a user did not filter any of the applications and scrolled all the way to the bottom, they might load somewhere between 125k to 250k entries/applications.
sql - 将非规范化文件中的数据加载到规范化表中
我收到一个非规范化文本文件,必须将其加载到规范化表中。
非规范化表:
CustomerID -- 类别 -- Category2 -- Category3 -- Category4
1 -- A -- B -- C -- D
标准化后,它应该如下所示:
客户 ID -- 类别
1 -- A
1 -- B
1 -- C
1 -- D
编写 T-SQL 语句来实现这一目标的最佳方法是什么(SQL Server 2008)?
sql - 在这种情况下可以接受非规范化吗?
我有下locations
表:
和phones
表格:
现在,请记住,对于任何捐赠商店,它最多可以有五个电话号码。顺序无所谓。
最近我们需要添加另一个表,其中包含与商店相关的信息,其中还包括电话号码。
现在,这个新表没有应用 locationID,所以我们不能将电话存储在以前的电话表中。
最后,保持数据库规范化需要 2 个新表和总共 4 个连接来检索数据。对其进行非规范化会使旧表如下所示:
总共有 2 个表和 2 个连接。
我不喜欢拥有data1
, data2
,data3
字段,因为这可能是一个巨大的痛苦。那么,你的意见是什么。
linq - Linq:查询从一个拆分列创建的“虚拟”列
我正在使用一个看起来很讨厌但不可更改的数据库。
我们有一个名为“Locations”的表,其中包含“Position”列
此列的值如“A SHELF 5”
这意味着“案例A,货架5”。在理想情况下,我会有一个 Case 和 Shelf 列,其值分别为“A”和 5。
我想知道的是,是否有办法在我的实体类中定义一些“虚拟”(也许不是正确的词)列,这样一旦我这样做,我就可以像这些列存在一样查询表(选择、Where 子句、分组依据等)?
诚然,我对 Linq 还很陌生,所以我什至没有使用正确的技术术语来描述我想做的事情。这使得找到答案变得更加困难。因此,如果有人只是想向我指出任何可以帮助我入门的介绍性文档,我会认为这是一个有效的答案。
为了使它更复杂,该列的结构仅如上,取决于其他一些列的值,但我不会去那里。
感谢您抽时间阅读。过去的经验告诉我,SO 团队是最好的!
oracle - 规范化表:在一系列行中查找唯一列 (Oracle 10.x)
我有一个具有以下结构的表:
如您所见,它是一张非规范化表,在一张表中同时保存了 Worker 和 Person(以及一个 Person 的多个版本)数据。我的愿望是规范化该表,但是,由于该表包含大量数据(很多列),我需要确定哪些列应该进入 Workers 表,哪些列应该进入 Persons 表。结果应该是这样的:
为此,我需要分析所有唯一人员(在 WorkerPersons 中由 PersonID 分隔)的 Person 范围内哪些数据不同。例如:
在这种情况下,PersonA 上有 3 个版本,PersonB 有 2 个版本。Column1 的值在所有版本的 Person 中始终相同,我们可以将该列移动到表 Worker。但是 Column 2 和 Column3 的值会随着 Person 的不同版本而变化,因此应该将这些值移动到 Person 表中。
没想到,我有大约 10 个这样的表需要标准化,每个表大约有 40 列。每个表包含大约 500k 到 5m 行。
我需要一个脚本来帮助我分析哪些列要移动到哪里。我需要一个脚本来输出在整个表中唯一 Person 范围内发生变化的所有列。我不知道如何做到这一点。我尝试了 LAG 分析函数来与下一行进行比较,但是如何输出更改的列却超出了我的范围。
请指教。
最好的祝愿,安德鲁