标签: denormalization

处理"超标准化"数据

我的雇主,一家小型办公用品公司,正在转换供应商,我正在查看他们的电子内容,以提出一个强大的数据库架构; 我们以前的模式几乎没有任何想法就被抛在了一起,而且它几乎导致了一个无法忍受的数据模型,其中包含损坏的,不一致的信息.

新供应商的数据比旧供应商的数据要好得多,但他们的数据就是我称之为超标准化的数据.例如,他们的产品类别结构有5个级别:Master Department,Department,Class,Subclass,Product Block.此外,产品块内容具有产品的长描述,搜索术语和图像名称(这个想法是产品块包含产品和所有变体 - 例如特定笔可能有黑色,蓝色或红色墨水;所有这些项目基本上是相同的,所以它们适用于单个产品块).在我给出的数据中,这表示为产品表(我说"表",但它是带有数据的平面文件),其中引用了产品块的唯一ID.

我试图提出一个强大的模式来容纳我提供的数据,因为我需要相对较快地加载它,他们给我的数据似乎与他们的数据类型不匹配在他们的样本网站(http://www.iteminfo.com)上提供演示.无论如何,我不打算重复使用它们的表示结构,所以这是一个没有实际意义的点,但我正在浏览网站以获得有关如何构建事物的一些想法.

我不确定的是我是否应该以这种格式保存数据,或者例如使用自引用关系将Master/Department/Class/Subclass合并到单个"Categories"表中,并将其链接到a产品块(产品块应该分开,因为它不是"类别"本身,而是一组给定类别的相关产品).目前,产品块表引用了子类表,因此如果将它们合并在一起,这将更改为"category_id".

我可能会创建一个电子商务店面,利用Ruby on Rails中的这些数据(或者说这是我的计划,无论如何)所以我试图避免以后遇到障碍或者有一个膨胀的应用程序 - 也许我我给了它太多的想法,但我宁愿安全而不是抱歉; 我们以前的数据真是一团糟,由于数据不一致和不准确,使公司损失了数万美元.此外,我将通过确保我的数据库是健壮的并强制执行约束(我计划在应用程序级别执行它)来稍微摆脱Rails约定,所以这也是我需要考虑的事情.

你会如何解决这样的情况?请记住,我已经将数据加载到模拟表结构的平面文件中(我有文档说明哪些列是哪些列以及设置了哪些引用); 我正在试图决定是否应该像现在这样将它们保持正常化,或者我是否应该寻求巩固; 我需要知道每个方法将如何影响我使用Rails对网站进行编程的方式,因为如果我进行整合,单个表中基本上会有4个"级别"的类别,但这似乎比单独的表更易于管理每个级别,因为除了Subclass(直接链接到产品块),他们不这样做除了显示下一级别的类别之外的任何东西.对于处理这样的数据的"最佳"方式我总是感到茫然 - 我知道"正常化直到它受到伤害,然后反正规化直到它起作用"这句话但是我从来没有真正实现过它.

sql normalizing database-design ruby-on-rails denormalization

4
推荐指数
1
解决办法
1201
查看次数

总计应该非规范化吗?

我正在一个带有简单规范化数据库的网站上工作.

有一个名为Pages的表和一个名为Views的表.每次查看页面时,该视图的唯一记录都会记录在"视图"表中.

在网站上显示页面时,我使用简单的MySQL COUNT()来总计显示的视图数量.

数据库设计看起来很好,除了这个问题:我对如何在数千个页面中检索前10个最常查看的页面感到茫然.

我应该通过添加Pages.views列来对页面表进行非规范化,以保存每个页面的总观看次数吗?或者是否有一种有效的方法来查询前10个最常查看的页面?

mysql denormalization

4
推荐指数
1
解决办法
719
查看次数

为什么我们使用维度模型而不是非规范化的关系模型?

我在一些问题上感到困惑.我需要他们的答案.如果我们的关系模型也是去标准化那么为什么我们更喜欢维度模型?我们更喜欢维模型而不是关系模型的原因是什么?您的历史数据也可以存储在OLTP中,您可以在任何OLTP上轻松执行报告,然后我们使用维度模型和数据仓库?维度和非规范化表之间有什么区别?

提前致谢

oltp denormalization relational-database dimensional-modeling database-schema

4
推荐指数
2
解决办法
5613
查看次数

如何对规范化程度很高的数据库系统进行非规范化?

我想将一些数据库非规范化引入到一个高度规范化的系统中.

我有一大堆已经发展了十多年的数据库,并且负载越来越大,所以我希望提高性能,并可能降低某些查询的复杂性.

在存储过程中完成10个连接以完成任何给定任务并不罕见.我被告知超过6个臭.

我应该保持表结构不变并提供一些物化视图或非规范化"缓存"表.

关于最佳实践或推动正确方向的一些建议会有所帮助.

谢谢

performance caching sql-server-2005 denormalization

3
推荐指数
1
解决办法
2598
查看次数

mySQL - 我应该反规范吗?

概述 (对不起它含糊不清 - 我想如果我详细介绍它会让事情复杂化)

我有三个表,表一包含一个id,表二包含自己的id和表一个的id和表三包含自己的id和表二的id.

我花了很多时间思考,我认为表3中还包含相关的表格id更有效.

- 这意味着我不必加入三个表,我可以查询表三(对于将经常使用的查询)

- 它只允许锁定表3中包含表1中特定id的行,从而更容易实现预订系统.

对于想要了解有关数据库布局的更多信息的人来说,这里有更多信息

去标准化有哪些不利因素?我见过一些完全反对它的人和其他相信正确情况的人,这是一个有用的工具.id永远不会改变,所以除了必须两次插入相同的数据以及因此它将消耗的额外空间(因为它只是id的肯定可以忽略不计)之外,我真的没有看到任何缺点.

mysql database database-design denormalization

3
推荐指数
1
解决办法
357
查看次数

非规范化:多少钱?

我已经为我正在"按书"构建的网络应用程序设计了数据库.也就是说,我:

  • 创建了包含应用程序实体,属性和关系的ER图
  • 将ER图转换为模式
  • 将模式转换为"无模式"形式以使用(数据库是Cassandra(NoSQL)数据库)对数据库建模.

一切进展顺利(到目前为止).我之前已经非常规化了很好的结果,并且我正在实施应用程序的一部分,它将使用尚未非规范化的数据.我预测,对于这个特定部分这样做会大大提高性能(从1 Column_Family(关系世界中的"表")而不是7).

但是,我担心我可能会非常规范化.如果我要对相关部分这样做,它几乎会将我的应用程序中的Column_Family/table计数减少大约20%,并且由于某种原因,我的数据库非常规化了很多.

如果应用程序最终成功,我能够让数据库设计师或管理员加入,我希望他能够确定我正在执行的非规范化对性能是必要的我是寻求(最佳情况)或至少无害(最坏情况).

在做出非规范化决策时,我应该注意哪些具体事项可能表明这样做是否会很糟糕,还是总是归结为速度与可维护性?

database database-design denormalization cassandra

3
推荐指数
1
解决办法
2883
查看次数

SQLite 中规范化的重要性

我开发了一个黑莓应用程序(分类帐管理系统),它使用 SQLite 进行数据存储。

我在我的应用程序中创建的表之间有几种关系

以下是一些表及其列:

1. Customer Details-Name,Phone,Email
2. Bills-Name,Amount
3. Update Customer-Name
4. Update Bills-ID
Run Code Online (Sandbox Code Playgroud)

和许多其他临时表。

当我开发这个应用程序时,我从来没有真正费心去查看我的表是否被规范化。

现在在我完成我的应用程序后,我想知道是否需要规范化。

我的大部分查询都是基于选择插入客户和账单表单的记录,然后对其进行操作。

例如,我有一个捕获所有客户数据的客户详细信息表。现在一旦在数据库中记录了一个名称,我不希望表中再次出现相同的名称,所以这需要规范化概念。

同样在像 SQLite 这样的 RDBMS 中,规范化是必不可少的。它是否与基于 DBMS 的表具有相同的含义。

OLAP 和 OLTP 系统与数据库规范化之间也有什么区别。如果是,我的黑莓应用程序会被归类为哪些类别?

如果有人对此表示赞赏,请给予指导。

sql sqlite olap normalization denormalization

3
推荐指数
1
解决办法
5474
查看次数

什么是最小的de- /标准化数大于1?(64位)

我正在使用非规范化的数字.

我知道:

实质上,非规范化浮点数能够表示可以用任何浮点值表示的SMALLEST(幅度)数.

我也知道数字可以这样表示:

在此输入图像描述

然而,我被卡住的地方是de- /标准化数字的实际计算?

有没有办法做到这一点?有什么特别的号码吗?

非常感谢你的回答!

floating-point binary denormalization floating-accuracy ieee-754

3
推荐指数
1
解决办法
3502
查看次数

使用C++,有没有办法检测浮点/双精度非正规数是否被编译器/系统"规范化"?

直截了当地说,我的问题正如标题中所述:在使用C++编写的应用程序中,有没有办法检测浮点/双精度非正规数是否被编译器/系统"标准化"(例如,通过DAZ,FTZ,等等)?

如果需要上下文,我想要完成的是检测programaticaly最小的float/double值.然而,这些结果取决于非正规数是否被"标准化":如果是,则最小值由std的数值限制min()给出,否则由denorm_min()给出.

c++ floating-point double compilation denormalization

3
推荐指数
1
解决办法
230
查看次数

SQL Server性能:50列vs单二进制/ varbinary

是否可以通过用float一个binary(n)(n50 x 4)替换(比如说)50 列来改进SQL Server 2008 R2(和更新版本)的插入性能?

认为使用固定大小binary(n)应该可以提高性能(数据量相同,处理所有列和更短的SQL查询所需的工作量更少),但许多网站建议不要使用binary列,所以我想看看是否有使用它真的有问题吗?

此外,问题是该表是非规范化的,并且通常不是所有列都填充值,因此varbinary(n)在许多情况下允许我减小行大小.有时只填充一列,但平均为~10列.

然后第三个问题是,如何更进一步,用一个替换(比如说)5行×50 float32varbinary(5*50*4)

因此,获得一些见解会很酷:

  1. float用单个替换1行50 列binary(200);
  2. float用单个替换1行50 x varbinary(204)(标志/长度信息的几个字节) - 在未使用列时节省空间;
  3. float用单个替换5行50 x varbinary(1024)(标志/长度信息的几个字节).

在所有情况下,始终一次读取整行.

(更新)

为了澄清,存储的数据是:

 Timestamp_rounded    Value_0ms  Value_20ms  Value_40ms ... Value_980ms
 2016-01-10 10:00:00    10.0       11.1        10.5     ...    10.5
Run Code Online (Sandbox Code Playgroud)

我总是读取整行,主要聚类键是第一列(Timestamp),我将永远不必通过任何其他列查询表.

标准化数据显然会有一个Timestamp/ Value对,Timestamp然后具有毫秒精度.但是我必须存储50行的两列,而不是1行(Timestamp+ BLOB).

sql-server performance blob denormalization varbinary

3
推荐指数
2
解决办法
2167
查看次数