问题标签 [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 投票
1 回答
280 浏览

database - 许多 fk 表的一个表列?

这种情况的最佳解决方案/做法是什么?我有一个表,可以引用多个表(对象)?

这是表 UserCalendar 的示例。这是一个用户保存他的事件的表,而且系统从后面插入到这个表中。用户执行一些服务,这些服务具有截止日期,并且这些服务也插入到此表中。问题是没有像 UserEvent 表这样的表。用户应将此日历中的所有事件保存为描述。我应该尽可能简单。

我可以设计这两种方式。

1)

用户日历 UserCalendarId
| 用户名 | 说明 | 对象类型 | 对象标识

使用此选项,我不必对这些表进行 FK。我只能更改 ObjectType(通知、服务、日历)并将该表的 id 用作 ObjectId。在事件的情况下,将没有这样的表,这将是空字段。我们称之为伪 FK 列。

2)或者我可以按照理论上的说法为每个 FK 使用多个表。

用户日历 UserCalendarId
| 用户名 | 说明

UserEvent
UserCalendarId |EventId

UserServices
UserCalendarId|ServiceId

UserNotifications
UserCalendarId |NotificationId
...

对于每个系统事件或属于特定类型的任何其他自定义事件,此外部关系表可以是一个数字

第一个解决方案是快速实施。

0 投票
2 回答
544 浏览

sql - 数据库规范化

我最近将一个非常大的数据库表分解为更小的、可管理的表,并且在大多数情况下我对我的工作感到满意,并且我觉得数据已正确规范化。

但有一个例外。有问题的表格来自产品数据库,该数据库存储有关公司销售的(您猜对了)产品的信息。我已将大部分信息分成两个表:ProductBaseProductBasePackaging.

这些表包含与基本零件编号相关的信息,而不是与单个产品相关的信息(每个基本编号有多个产品)。

ProductBase包含相当一般的信息,例如等MarketingCopyKeywords以及关于结构的信息,即材料、组件等。

当然ProductBasePackaging还有关于包装的数据。

现在我正在编写用于数据操作的应用程序,我开始怀疑自己。看来我现在让自己变得更难了,因为我必须跟踪使用相同键(基本部件号)的多个表。还是我将它们分开并可能更进一步并将结构也分开到它自己的表中是正确的?

我非常精通 sql 的使用,但这是我第一次真正设计数据库结构,更不用说重组现有的大型数据库了。所以基本上我要问的是我应该有多个具有相同键的表,这些表按数据类型分隔,还是将事物放在一个表中,我可以使用相同的键从一个表中引用我需要的所有内容?

抱歉,我知道要阅读的内容很多,我希望它有意义,并感谢所有通过它的人!

0 投票
1 回答
276 浏览

search - 具有标准化数据的应用程序中的多语言自由文本搜索?

我们的数据库中有枚举、自由文本和引用字段等。

每个枚举都有自己的翻译,自由文本可以是任何语言。我们想做高效的大规模自由文本搜索和基于枚举值的搜索。

我知道像 Solr 这样的解决方案很好,但这意味着我们必须用系统中所有语言的所有文本来索引整个非规范化记录。这似乎有点过分了。

搜索多语言规范化数据的推荐方法有哪些?以前有人解决过这个问题吗?

0 投票
4 回答
34936 浏览

join - 无损连接属性

有人可以向我解释一下关系模式中的无损连接属性是什么意思吗?

是否能够在关系分解期间保持信息/数据的语义,同时进行规范化?

0 投票
1 回答
10567 浏览

database-design - 自上而下与自下而上 - 规范化

有人可以为我描述关于数据库(即关系数据库)自上而下规范化和自下而上规范化之间的区别。

0 投票
2 回答
499 浏览

database - 数据库模式的规范化

以下是 3 个对象之间的关系 - A、B 和 C。
A:B - 1:M
A:C - 1:M
B:C - M:M,但它们必须共享同一个 A 实例。

我当前的架构如下。
a (id, data)
b (id, a_id, data)
c (id, c_id, data)
b2c (b_id, c_id)

如何设计更好的架构来避免数据不一致?

我知道这篇文章的标题有点笼统。如果你们中的任何人能想到一个更好的标题,请随意编辑这篇文章。


例如,我将开发一个用于生成广告墙的应用程序。一个广告墙分为很多sections。每个部分都有一个dimension(宽度和高度)。有很多ads,每个都有一个维度。想想一个广告可以在多个版块上展示,而一个版块可以有多个广告轮播。所以版块和广告之间的关系是多对多的,但限制是它们必须具有相同的维度。

0 投票
5 回答
36736 浏览

database - 归一化 - 2NF 与 3NF

努力去发现它们之间的差异。我知道我们说 2NF 是“整个钥匙”,而 3NF 是“只有钥匙”。

引用 Smashery 的这个好答案:数据库设计中的 1NF、2NF 和 3NF 是什么?

用于 3NF 的示例与 2NF 完全相同 - 它是一个仅依赖于一个关键属性的字段。3NF 的示例与 2NF 的示例有何不同?

谢谢

0 投票
3 回答
397 浏览

database - 与数据库表中的原子性有关的问题

我正在创建一个论坛页面,为此我创建了以下数据库架构:

论坛中的条目将类似于:

标签的示例条目将是:

现在的问题是,第一个范式表示所有字段都应该是原子的,在这种情况下不满足,但我认为节省了空间,就好像我正在创建一个新表一样,forum_tag(questionId, tagId); 然后我认为这将在数据库上占用更多空间,但是在概念上是正确的。

所以我不知道我应该做什么,是做我现在正在做的事情,还是按照规范化使列原子化。

请解释哪个更好以及为什么,因为在很多情况下我发现了这样的问题,但我一直模棱两可,我应该怎么做!

所以请帮忙。

提前致谢 :)

0 投票
2 回答
2120 浏览

normalization - 第四范式

第四范式描述了一种在 BCNF 中但也不包含非平凡多值依赖关系的关系。

我正在努力理解什么是微不足道的多值依赖和非微不足道的多值依赖以及它们之间的区别。我如何识别后者以执行 4NF?

编辑:

我主要需要知道琐碎依赖和非琐碎依赖之间的区别是什么?

0 投票
3 回答
866 浏览

database - 归一化 3NF

我阅读了一些规范化的例子,但是我遇到了一个我不明白的例子。

该示例的网站位于此处:http ://cisnet.baruch.cuny.edu/holowczak/classes/3400/normalization/#allinone

我不明白的部分是“第三范式”

在我的脑海中,我看到以下传递依赖EMPLOYEE_OFFICE_PHONE (Name, Office, Floor, Phone)Name->->Office|FloorName->->Office|Phone

作者将表格拆分EMPLOYEE_OFFICE_PHONE (Name, Office, Floor, Phone)EMPLOYEE_OFFICE (Name, Office, Floor)EMPLOYEE_PHONE (Office, Phone)

从我一开始的判断来看,我仍然看到传递依赖,Name->->Office|Floor所以我不明白为什么它在 3NF 中。我说在 中存在传递依赖是错误的Name->->Office|Floor吗?

传递性的推理:这是我的函数依赖列表

  1. 名称 -> 办公室
  2. 名称 -> 楼层
  3. 姓名 -> 电话
  4. 办公室 -> 电话
  5. 办公室 -> 楼层(这是不正确的吗?为什么?

谢谢大家的帮助!