问题标签 [database-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 投票
2 回答
440 浏览

database - 这是正常化的哪个阶段?(将重复数据移动到单独的表中)

我注意到,在设计数据库时,我倾向于将任何重复的数据集转移到单独的表中。例如,假设我有一桌人,每个人都生活在一个州。然后,我会将这些重复状态移动到一个单独的表中,并用外键引用它们。

但是,如果我不再存储有关状态的任何数据怎么办。然后我会有一个带有 StateID 和 State in 的表。这个操作正确吗?状态依赖于用户表的主键,那么将其转移到自己的表中是否有帮助?

谢谢,

0 投票
10 回答
2081 浏览

.net - 我们应该对数据库进行非规范化以提高性能吗?

我们需要每秒存储来自多个设备的 500 个测量值。每个度量都包含一个时间戳、一个数量类型和几个向量值。现在每个测量有 8 个向量值,我们可以认为这个数字是恒定的,以满足我们原型项目的需要。我们正在使用 HNibernate。测试在 SQLite 中完成(磁盘文件 db,而不是在内存中),但生产可能是 MsSQL。

我们的 Measurement 实体类是一个包含单个测量值的实体类,如下所示:

矢量值存储在一个单独的表中,因此它们中的每一个都通过外键引用其父测量值。

我们做了几件事来确保生成的 SQL(合理)高效:我们使用 Guid.Comb 生成 ID,我们在单个事务中刷新大约 500 个项目,ADO.Net 批量大小设置为 100(我认为 SQLIte 不支持批量更新?但以后可能会有用)。

问题

现在我们可以每秒插入 150-200 个测量值(这还不够快,尽管这是我们正在谈论的 SQLite)。查看生成的 SQL,我们可以看到我们在单个事务中插入(如预期的那样):

  • 1 个时间戳
  • 1 次测量
  • 8 个向量值

这意味着我们实际上做了 10 倍的单表插入:每秒 1500-2000 次。

如果我们将所有内容(所有 8 个向量值和时间戳)放入测量表(添加 9 个专用列),似乎我们可以将插入速度提高 10 倍。

切换到 SQL Server 将提高性能,但我们想知道是否有办法避免与当前数据库组织方式相关的不必要的性能成本。

[编辑]

使用内存中的 SQLite,我可以获得大约 350 个项目/秒(3500 个单表插入),我相信这与 NHibernate 一样好(以这篇文章作为参考:http ://ayende.com/Blog/archive/ 2009/08/22/nhibernate-perf-tricks.aspx)。

但我不妨切换到 SQL Server 并停止假设,对吧?我会在测试后立即更新我的帖子。

[更新]

我已经转移到 SQL Server 并扁平化了我的层次结构,我通过存储 3000 次测量/秒数小时对其进行了测试,它似乎工作正常。

0 投票
4 回答
171 浏览

database - 数据库中的数据集是否总是以一种形式或另一种形式规范化

假设我有一组数据,给定数据和关系模式,我可以假设这组数据以一种或另一种形式标准化。在我看来,给定的原始数据必须标准化为某种形式。然而,与朋友的讨论导致在这里问我这个问题。

为了详细说明这个问题,我想说给定关系或表的一组函数依赖关系,如果不是其他表,是否可以保证表至少处于 1NF

0 投票
4 回答
475 浏览

database-design - 数据库已规范化,但生成的复合键包含 20 列

问题是存在非常大的关系,以至于在规范化后它们有 20 个主键(复合键),它们实际上是外键。

这些必须声明为主键才能唯一地标识关系。这个对吗?

0 投票
1 回答
209 浏览

database-design - 重复组与否

下表中的 SName 是否被视为重复组?

SName 字段中列出的每个主题都位于单独的单元格中。据我所知,重复组是当一个单元格包含多个值时。因此我不确定,因为受试者在不同的单元格中。

0 投票
1 回答
96 浏览

database - 仅针对一个字段的单独表可以是合乎逻辑的吗?

如果我有一个包含 City 字段的表,并且正如预期的那样,该字段会重复自身,因此仅将其与另一个表分开就可以规范化概念?我的意思是只有一个字段的分隔表可以有意义并且可以帮助提高性能?

0 投票
13 回答
5565 浏览

database - 数据库规范化

我是数据库设计的新手,我已经阅读了很多关于规范化的内容。如果我有三张桌子:住宿、火车站和机场。我会在每个表中都有地址列还是由其他表引用的地址表?是否存在过度规范化之类的事情?

谢谢

0 投票
3 回答
136 浏览

mysql - 是否有规范列 = 行的表格的快捷方式?

假设你有一个 mySQL 表来描述你是否可以混合两种物质

第一步是将其转换为

但是你有重复的信息。(例如,如果 A 可以与 B 混合,则 B 可以与 A 混合),因此,您可以删除几行以获得

虽然最后一步在一张小桌子上很容易,但在一张更大的桌子上手动完成却要花很长时间。如何自动删除具有重复含义但内容不同的行?

谢谢,我希望我的问题有意义,因为我仍在学习数据库

0 投票
3 回答
813 浏览

database-normalization - 尝试归一化为 BCNF

我不确定这是否在 BCNF 中,但是老师告诉我INSTRUMENT在 BCNF 中.. 他在惹我吗?老师总是在什么是对什么是错上搞乱我的想法,让我不确定。他一直在说我已经清楚地想到的东西,我什至不明白他在说什么。

INSTRUMENT ( InstrumentID,InstrumentType, Tune, Performer, Adr, Phone, Availability) NOTES ( TitleNr,Tune,Composer, Copies, Title, Performer)

那么这是标准化的吗?在 BCNF 中:

乐器( InstrumentID, InstrumentType, Tune, Availability, PerformerID*)
NOTES ( TitleNr, Title,Tune, Composer, Copies, PerformerID*)
PERFORMER ( PerformerID, Name, Adr, Phone)

调子在 INSTRUMENT 和 NOTES 中都有。两者都可以吗?

0 投票
4 回答
1671 浏览

mysql - MySQL - 从第一范式转移到第二和第三范式

这个问题与之前的主题“MySQL - 从平面表移动到第一个范式”(http://bit.ly/9pvS0Y直接相关- 当我现在问一个关于移动到第二个和第三个范式的问题时,我认为最好开始一个新话题。

下面是我的第一个范式模式,我很确定它对于我的目的来说足够可靠,但如果我错了,请纠正我。

我想知道如何将它转移到第二种和第三种形式,任何关于我的表将如何受到 2NF 和 3NF 规则影响的指针都会非常有用,谢谢。

关系

- Activity和Location的关系=一对多 - 一个activity可以有一个location,一个location可以有很多activity(LocationID作为Activity中的FK)

- Activity和Week的关系=一对多 - 一个activity可以有一周,一周可以有很多activity(WeekID作为Activity中的FK)

-用户和活动= 多对多 - 一个用户可以有很多活动,一个活动可以有很多用户