问题标签 [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 回答
645 浏览

oracle - 物化视图可以用作快速去特征化的大表吗?

Oracle 物化视图是否可以用于连接多个具有外键的相关表以创建一个更大的非规范化大表,该表会立即刷新?

在一些调查中,它说在使用快速刷新时不允许加入。

我可以用 Oracle 材料化视图做这种事情是我的假设是错误的吗?

0 投票
2 回答
260 浏览

mysql - 我应该使用触发器来连接两个相关但严重非规范化的表吗?

我以前从未使用过触发器,但这似乎是一个可靠的用例。我想知道触发器是否是我应该使用的,如果是这样,我可以用一点手来了解如何去做。

本质上,我有两个严重非规范化的表goalsusers_goals. 两者都有重复数据的title列 ( ) 。因此,将有一个“学习如何使用触发器”的主要目标,以及许多(好吧,在这种情况下可能不多)用户的目标具有相同的标题。该网站的架构要求这种情况。VARCHARtitle

我还没有需要在这两个表之间建立关系。INDEX我将单个用户的目标链接到主要目标,但只需按标题查询(在列上带有一个title)。现在我需要有一个关联这两个表的第三个表,但它只需要最终保持一致。会有两列,FOREIGN KEYsgoal_idusers_goal_id

触发器是解决这个问题的方法吗?如果是这样,那会是什么样子?

0 投票
9 回答
26533 浏览

sql - 何时对数据库设计进行非规范化

我知道标准化已经在 Stack Overflow 上进行了广泛的讨论。我已经阅读了许多以前的讨论。不过,我还有一些其他问题。

我正在开发一个至少有 100 个表的遗留系统。数据库存在一些非规范化的结构、包含各种不同数据的表以及其他问题。我被赋予了尝试改进它的任务。我不能只是重新开始,而是需要修改现有架构。

过去我一直尝试设计规范化的数据库。现在的问题。一位高级开发人员建议在某些情况下我们无法规范化:

  1. 有时间数据。例如,创建链接到产品的发票。如果客户在一年后要求提供此发票的副本,我们必须能够提供原件的准确副本。如果产品价格、名称或描述已更新怎么办?大佬建议将价格等产品信息复制到发票表中。我在想也许我们应该有另一个表,比如 productPrice ,它有一个日期字段,这样我们就可以跟踪价格随时间的变化。我猜我们需要相同的产品描述和名称吗?看起来很复杂。你怎么看?

  2. 数据库是一个会计系统。我对会计不是很熟悉。目前,一些汇总数据被导出并存储在数据库中。例如当年的总销售额。我的高级助理说会计师喜欢通过将该值与实际从发票等计算的数据进行比较来检查事情是否正确,以使他们相信应用程序正常运行。

他说,例如,目前我们可以判断是否有人错误地删除了去年的发票,因为总数不会相同。他还指出,动态计算这些总数可能会很慢。当然我说过数据不应该重复,应该总是在需要的时候计算。我建议我们可以使用 SQL Reporting Services 或其他可以在一夜之间生成这些报告并缓存它们的解决方案。反正他不信。对此有何评论?

0 投票
7 回答
12774 浏览

sql - 我应该使用平面表还是规范化数据库?

我有一个我目前正在开发的 Web 应用程序,它使用 MySQL 数据库作为后端,在我继续之前,我需要知道什么对我的情况更好。

简单地说,在这个应用程序中,用户将能够使用任何数字字段(他们决定)构建自己的表单,现在我将它们全部存储在由外键链接的几个表中。我的一个朋友建议,为了让事情“简单/快速”,我应该将每个用户的表单转换为一个平面表,以便从他们那里查询数据保持快速(以防大幅增长)。

我应该使用外键(索引等)将所有内容汇集到关系表中来保持数据库规范化,还是应该为用户创建的每个新表单构建平面表?

显然,创建平面表的一些好处是数据分离(安全)和查询速度会降低。但是说真的,我会从中获得多少收益?我真的不想要 10000 个表并且一直在删除、更改和添加,但如果它比我会做的更好......我只需要一些输入。

谢谢

0 投票
3 回答
8719 浏览

excel - 在 Excel 中创建逗号分隔值(使用数据透视表)?

有没有办法在 Excel 中生成逗号分隔的值(最好使用数据透视表)?考虑以下数据:

我想要一张如下表:

这在 Excel 中可行吗?数据来自 SQL 查询,因此我可以编写一个带有递归 CTE 的 UDF 来计算,但这是针对单个 ad-hoc 查询的,我想要一种快速而简单的方法来获取非规范化数据。最后,发布这个可能比编写 UDF 花费更长的时间,但是......

0 投票
3 回答
1357 浏览

sql - 通讯录数据库设计:非规范化?

我正在设计一个类似联系人管理器/地址簿的应用程序,但无法确定数据库设计。

在我当前的设置中,我有一个联系人,其中包含地址、电话号码、电子邮件和组织。所有联系人属性当前都是单独的表,带有联系人表的 fk。不用说,一个联系人可以拥有任意数量的这些属性。

现在,如果我想将联系人读入应用程序,我发现自己将所有这些表连接在一起。由于没有对相关表执行过滤器、反向查找、排序等,将相关字段存储为联系表的直接属性上的 json 编码列表不是更好/更简单的解决方案吗?

例如,不是将带有 fk 的联系人与具有 3 个条目的电话号码表联系起来,而是将所有电话号码编码并将它们存储到联系人表的字段中?

任何见解都非常感谢!(仅供参考,我正在使用 Django,尽管这并不重要)

0 投票
3 回答
514 浏览

database - 存储用户提交的项目名称(及其同义词)的最佳方式

考虑一个具有多个商店的电子商务应用程序。每个店主都可以编辑其商店的商品目录。

我当前的数据库架构如下:

注意:error表示拼写错误(例如“Ericson”)。description和表是picture全局”,可以选择被“本地”和表的字段覆盖(以防店主想要为商品提供不同的图片)。有助于区分独特的项目名称(“Jimmy Joe's Cheese Pizza”与“Cheese Pizza”)item_names descriptionpictureitemscommon

我认为这个模式的好处是:

优化查找&处理同义词:可以使用item_names&item_synonyms表查询name LIKE %QUERY%,获取item_name_id需要与items表连接的s列表。(同义词示例:“Sony Ericsson”、“Sony Ericson”、“X10”、“X 10”)

自动完成:同样,对表的简单查询item_names。我可以避免使用DISTINCT并最大限度地减少变化的数量(“Sony Ericsson Xperia™ X10”、“Sony Ericsson - Xperia X10”、“Xperia X10、Sony Ericsson”)

不利的一面是:

开销:插入项目时,我查询item_names该名称是否已存在。如果没有,我创建一个新条目。删除项目时,我会计算具有相同名称的条目数。如果这是唯一具有该名称的项目,我会从表中删除该条目item_names(只是为了保持清洁;考虑可能的错误提交)。更新是两者的结合。

奇怪的物品名称:店主有时会使用“哈利波特 1、2 本书 + CD + 魔法帽”之类的句子。有这么多开销来适应这样的情况是有问题的。这可能是我很想采用这样的模式的主要原因:

(......使用item_namesitem_synonyms作为我可以查询的实用程序表)

  • 您会建议更好的架构吗?
  • 是否应该为自动完成标准化项目名称?这可能是 Facebook 为“学校”、“城市”条目所做的吗?
  • 第一个模式还是第二个模式更好/最适合搜索?

提前致谢!

参考文献: (1)规范一个人的名字是否太过分了?, (2)避免 DISTINCT


编辑:如果输入了 2 个具有相似名称的项目,看到此内容的管理员只需单击“制作同义词”,这会将其中一个名称转换为另一个名称的同义词。我不需要一种方法来自动检测输入的名称是否是另一个名称的同义词。我希望自动完成功能能够处理 95% 的此类情况。随着表集大小的增加,“制作同义词”的需求将减少。希望能消除困惑。


更新:对于那些想知道我继续前进的人......我已经使用了第二个模式,但删除了item_namesanditem_synonyms表,希望Solr能够为我提供执行我需要的所有剩余任务的能力:

感谢大家的帮助!

0 投票
4 回答
312 浏览

database - 将数据序列化为单个文本字段 - 非规范化太过分了?

我很想对我目前追求的这个数据库设计是否合理提出一些意见。

假设我正在构建一个名为“Home”的表,该表有一个名为“rooms”的文本字段。在这个字段中是这所房子的一组房间的序列化数据。当然,我的第一直觉是将这些数据标准化为单独的“房间”表。然而,由于过去对过度规范化的数据库的一些令人沮丧的经历,我停下来问自己几个问题:

  1. 我需要找到一个特定的房间吗?
  2. 我是否需要更新单个房间?
  3. 任何家庭记录会共享房间记录吗?

每个问题的答案都是“不”。每个家庭的房间记录都是独一无二的。例如,永远不需要执行查询来找出数据库中有多少家有浴室。数据将始终从 Home 的角度提取。卧室和浴室的数量将明确存储在 Home 记录中以供搜索。

因此,我不必经常加入房间,而是想知道将这些数据序列化并将其弹出到文本字段中会有什么危害。

这对我来说很有意义,但我希望进行健全性检查。感谢您的任何意见!

0 投票
1 回答
1343 浏览

data-binding - 如何将包含连接的 linq-to-entities 查询绑定到可写数据网格视图?

这个问题虽然其他问题相似 ,但似乎并不重复。如果是,请澄清,我很乐意合并。

我想使用包含连接的 linq-to-entities 查询绑定到可写的 DataGridView。模型如下:

替代文字

非规范化的 DataGridView 应该像这样绑定:

替代文字

以下代码绑定但导致只读 DataGridView,因为 linq-to-entities 查询返回匿名类型(请参阅这篇文章)。我陷入了僵局,因为我认为我需要匿名类型来进行非规范化。

我也尝试了这里建议的解决方案,但它似乎适用于 linq-to-sql 但不适用于 linq-to-entities。将 bindingsource.datasource 设置为 linq-to-entities 查询时,会引发异常,显示“在 LINQ to Entities 中仅支持无参数构造函数和初始化程序”。

感谢您的意见,

蒂姆

0 投票
4 回答
38373 浏览

matlab - 如何将向量规范化/非规范化到范围 [-1;1]

如何将向量标准化为范围[-1;1]

我想使用 function norm,因为它会更快。

还让我知道如何在规范化后对该向量进行非规范化