问题标签 [normalization]

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 投票
3 回答
889 浏览

sql - 您将如何对通用方案的数据变量方差进行建模?SQL

我最近在考虑一些事情,我想知道做类似以下场景的正确方法是什么(我相信对于 DB 人来说做类似的事情是很常见的事情)。

假设您有一个产品表,如下所示(MySQL):

这里没有什么不寻常的。现在假设在不同的表中有一个类别的层次结构,并且有一个单独的表将多对多关系与 products 表绑定 - 这样每个产品都属于某种类别(我将省略那些,因为这不是这里的问题)。

现在到了有趣的部分——如果每个类别都要求产品项目附加一组变量。例如,计算机显示器类别中的产品必须具有 LCD/CRT 枚举字段、屏幕尺寸枚举等 - 以及其他一些类别,假设冰淇淋有一些其他变量,如风味 varchar、货架存储时间 int 等。

这里的问题在于所有产品都有一组共同的变量(id、name、description 和类似的),但是还有其他变量在类别之间不一致 - 但所有产品都应该共享共同的集合,因为最后它们都属于产品组,因此可以查询例如 SELECT * FROM products ORDER BY company_id (琐碎的例子,可能不具有代表性,但你明白了)。

现在,我看到了几个潜在的解决方案:
- 为每个产品类别生成单独的表,并在其中存储带有适当附加变量的产品 - 愚蠢且查询不友好

- 产品表与公共变量保持相同,并为每个类别创建一个单独的表,其中包含额外的将两个表与 JOIN 绑定的变量 - 标准化,但查询性能和清晰度问题 - 如何从类别中过滤产品(第一个表 - 产品)和额外的变量过滤器(即 17 英寸 LCD 显示器) - 它需要 SQL JOIN 技巧

- 产品表保持不变并添加另一个变量类型文本,例如包含其他变量的 JSON 数据 - 紧凑且整洁,但无法使用 SQL 过滤变量

我知道我在这里遗漏了一些非常明显和简单的东西——我对标准化技术有点生疏了:)


编辑:在没有成功提出这个问题之前,我一直在搜索 stackoverflow。然而,在我发布问题后,我点击了我的一个标签“规范化”,发现了几个类似的问题,导致查找“泛化专业化关系设计”。故事的重点是,这一定是我的互联网生活中第一次出现标签在搜索中真正有用的情况。但是,我仍然想听听你们的意见和意见。
编辑2:方法 2 的问题是我希望大约 1000 个专业化。类别有一个层次结构(1-4 级深),端节点添加了专门的变量 - 它们以大约 1000 个的顺序累积,因此添加专门的表来连接有点不切实际。
编辑3:由于在我的案例中存在大量属性波动,建议的“实体属性值”看起来像是要走的路。查询噩梦来了!多谢你们。

0 投票
3 回答
23963 浏览

c# - 比较 DataTable 中的所有行 - 识别重复记录

我想在DataTable insertRows没有密钥的情况下规范化数据。为此,我需要通过查找它们的 ID ( import_id) 来识别和标记重复记录。之后,我将只选择不同的。我正在考虑的方法是将每一行与该 DataTable 中的所有行进行比较 insertRows

DataTable 中的列在设计时是未知的,并且没有键。性能方面,该表将有多达 10k 到 20k 条记录和大约 40 列

我如何在不牺牲太多性能的情况下做到这一点?

我尝试使用 linq 但我不知道如何动态指定 where 条件在这里我在循环中比较每一行的名字和姓氏

欢迎任何想法。如何使用 linq 找到类似的列名?>我的类似问题

0 投票
7 回答
1326 浏览

sql - 我应该如何将数据从“糟糕”的数据库设计迁移到可用的设计?

我继承的当前项目主要围绕一个未规范化的表。有一些标准化的尝试,但没有设置必要的限制。

示例:在 Project 表中,有一个客户名称(以及其他值),还有一个客户表,其中仅包含客户名称 [任何地方都没有键]。客户表仅用作在添加新项目时为用户提供的值池。客户表上没有主键或外键。

诸如此类的“设计模式”在数据库的当前状态和使用它的应用程序中很常见。我可以使用的工具是 SQL Server 2005、SQL Server Management Studio 和 Visual Studio 2008。我最初的方法是手动确定哪些信息需要规范化并运行 Select INTO 查询。有没有比个案更好的方法,或者无论如何这可以自动化?

编辑: 另外,我发现“工作订单号”不是 IDENTITY(自动编号,唯一)字段,它们是按顺序生成的,并且对于每个工作订单都是唯一的。现有编号中也有一些空白,但都是独一无二的。这是编写存储过程以在迁移之前生成虚拟行的最佳方法吗?

0 投票
6 回答
1551 浏览

database-design - 多个外键

我的数据库设计以前是相当线性的,所以我对可能很容易解决的问题感到困惑。

我有一个“POSTS”表,其中包含可能是“CATEGORY”或“TOPIC”子项的帖子。为“POSTS”表定义外键的最佳方法是什么?

我想我可以有一个名为 POST_CATEGORY_ID 的列和一个名为“POST_TOPIC_ID”的字段,它可以为空,但这听起来不对。当然,我缺少一个简单的解决方案!

0 投票
2 回答
126 浏览

sql - 我如何(快速)整理来自不同表格的 ID?

我有三个非规范化表,我必须从表面上看(数据来自一些外部资源)。这三个表有不同的定义,但它们各自从不同的角度描述了同一个对象。

这些表之间唯一的共同点是它们的主键。我可以使用 SELECT UNION SELECT 将 ID 聚集在一起,但查询似乎相对较慢,即使每个表都有其 PK 字段索引。我可以创建一个视图来抽象这个查询 vw_object_ids,但它以相同的速度执行。我想我可以添加一个索引来实现视图,但是在 SQL Server 2005 中,您不能使用 UNION 来索引视图。

我想要的是让 ID 的主索引与基础数据同步,这些数据可能随时更新或删除。我想我可以通过一组疯狂的触发器无限期地完成此任务,或者只是满足于未索引视图的速度。但我只是想确保我没有遗漏任何选项,或者这个场景是否有名称或是否表明了一种模式。

想法?

0 投票
1 回答
210 浏览

machine-learning - 纠正收集数据中的已知偏差

好的,所以这里有一个类似于我的问题的问题(我将在下面详细说明真正的问题,但我认为这个类比会更容易理解)。

我有一个奇怪的双面硬币,每 1,001 次投掷中只有 1 次正面(随机)出现(其余为反面)。换句话说,每看到 1,000 个尾巴,就会有 1 个正面。

我有一种特殊的疾病,每看到 1,000 个尾巴,我只注意到 1 个,但我注意到每个头,所以在我看来,注意到头或尾的概率是 0.5。当然,我知道这种疾病及其影响,所以我可以弥补它。

现在有人给了我一枚新硬币,我注意到注意到正面的概率现在是 0.6。鉴于我的疾病没有改变(我仍然只注意到每 1,000 个尾巴中有 1 个),我如何计算这枚新硬币产生的实际正面与反面的比率?


好的,那么真正的问题是什么?好吧,我有一堆数据,包括输入和输出,分别是 1 和 0。我想教一个有监督的机器学习算法来预测给定输入的预期输出(0到1之间的浮点数)。问题是 1 非常罕见,这会破坏内部数学,因为它非常容易受到舍入误差的影响——即使是高精度浮点数学。

因此,我通过随机省略大部分 0 训练样本来对数据进行归一化,以使 1 和 0 的比率看起来大致相等。当然,这意味着现在机器学习算法的输出不再是预测概率,即。它现在将预测 0.5,而不是按应有的预测 0.001。

我需要一种方法将机器学习算法的输出转换回原始训练集中的概率。

作者注(2015-10-07):后来发现这种技术俗称“下采样”

0 投票
2 回答
738 浏览

php - 在 PHP 中标准化“时间”的最佳方法是什么?

我正在寻找一种将用户输入转换为适合计算的标准化数据的方法。输入是一段时间的,并且来自 Twitter,所以它只是字符串。理想情况下,我会喜欢这些结果:

一个半小时 --> 01:30

27.52 --> 00:28

5:24 --> 05:24

这是一件特别困难的事情吗?我可以专注于指导用户如何创建良好的输入,但也不想过于严格。

任何建议都会很棒,

谢谢!

0 投票
2 回答
115 浏览

mysql - MySQL 集合存储

我在用 PHP 编码的 Web 应用程序中有几个表,我想知道这是否是一个好的做法。

例如,产品将是:

虽然变化是:

这样许多产品可以具有相同的颜色/纹理。我发现的问题是我无法将其放入将数据返回为的单个查询中:

然后相应地解析它以显示每个变化的图像。

返回该格式的存储函数是最好的主意吗?或者我应该进一步规范化,如果是这样,如何?

0 投票
8 回答
518 浏览

sql - 餐桌设计

我想知道这是一个好的设计,假设表格如下

请注意国家 fk 如何在 3 个表格中重复?并在 2 个表中重复状态 fk?谁能告诉我这是不是一个好的设计?如果是这样,为什么?因为我不认为有必要经常重复它。

干杯

0 投票
1 回答
191 浏览

database-design - RDBMS 密钥混淆

我正在尝试整理我公司网站背后的数据库。

我们与站点和居民打交道。目前,站点引用作为外键包含在 Residents 表中,但显然,这仅在 1NF 中。

站点引用的格式为 nnnnn(例如 12345)。每个居民在 nnn 形式的站点中都有自己的参考(从 001 开始,到最大 999 结束)。

问题是,当我把它带到 2NF 时:

站点(参考、名称、费用)

驻留(站点参考,驻留参考,)

居民(参考,地址,用户名,密码)

居民参考永远不会唯一标识一个居民,如果有 2 个站点,那么将有 2 001。我不能使用用户名,因为这个字段只填充一次(如果!)他们已经注册了我们的网络服务。我只想为居民引入一个新的自动编号 ID,但我有些烦恼的是,有一个更优雅的解决方案。谁能建议它是什么?