标签: normalization

为什么这个关系是3NF?

我有一个关系:

\n\n
R4 = {{T,U,V}, {T \xe2\x86\x92 U, U \xe2\x86\x92 T, T \xe2\x86\x92 V}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

从答案中我知道这个关系在BCNF中。

\n\n

我正在经历严格确定这种关系所遵循的正常形式的过程。我很清楚为什么这种关系是在 1NF 和 2NF 中,如果我假设它是在 3NF 中,BCNF 就很容易遵循。

\n\n

然而,3NF 的定义指出:

\n\n
\n

每个非素数属性都非传递地依赖于表中的每个候选键。

\n
\n\n

但是,据我所知, 和{T}都是{U}表的候选键,{V}因此传递依赖于{U}

\n\n

维基百科上有 3NF 的替代定义:

\n\n
\n

Carlo Zaniolo 在 1982 年给出了与 Codd 等效的 3NF 定义,但表达方式不同。该定义指出,表在 3NF 中当且仅当对于其每个函数依赖项 X \xe2\x86\ x92 A,至少满足以下条件之一:

\n\n
    \n
  • X 包含 A(即 X \xe2\x86\x92 A 是平凡的函数依赖)
  • \n
  • X 是一个超级键
  • \n
  • AX 的每个元素(A 和 …

normalization dependencies

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

数据库规范化:哪个最合适?

我有 3 种不同类型的数据集:

通知:

  • 开始日期
  • 结束日期
  • 通知类型
  • country_id
  • state_id

活动:

  • 开始日期
  • 结束日期
  • 用户通知

交易

  • 电子邮件
  • 交易价值

所有这 3 个都有相同类型的子表,其中将有指向这些表的外键。

什么类型的设计最好?

  1. 3 个不同的表和一个子表,它将有 3 个不同的列作为指向每个不同父级的主键?
  2. 1 个组合父表,允许为任何特定类型不需要的列提供空值,还有一个main_type列表示每条记录是活动通知还是交易。子表将只有一个外键列。
  3. 3 个不同的表,每个主表类型 1 个,每个主表的子表使用主表的主键作为外键。

mysql normalization database-design

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

为一个人存储多个联系地址

简化图供参考。 供参考的简化图

我的数据库以以下方式存储有关人员的信息。有一个Person包含常见个人信息字段的 表格;姓名、出生日期、性别等。

每个人的联系信息以ContactInformation1:1 的关系保存在表中。

最后,我们存储数据的组织中每种特定类型的人都有单独的表,与 Person

我的Student桌子有点问题。基本上,我的客户现在想要存储学生的家庭住址和学期地址。但我不确定如何处理这个问题。

我看到三种可能的选择/解决方案:

  • 连接表-ContactAddressMappingPerson和之间创建连接表(例如)ContactInformation
  • 新表- 创建一个TermTimeAddress与 1:1 关系的表Student
  • 新字段- 向Student表中添加额外字段以保存术语时间地址。

现在这里是我看到的每个选项的主要“问题”:

联结表将允许为一个人存储多个地址,但我们只需要为学生(现在)这样做。如果不使用某种布尔字段,则也无法确定哪个地址是家庭/学期时间地址,该字段在该表中似乎是毫无意义的信息,因为它仅对学生而言是唯一的。

创建一个新表将术语时间地址与主要地址分开,但这些感觉像是重复,因为我基本上是在创建具有相同字段的特定类型的地址,减去电话号码和电子邮件地址等内容。

将字段添加到Student似乎我用应该在其他地方的信息把表格弄得乱七八糟。该表格应仅用于提供有关该学生的信息,例如他们的学校、学习领域以及安置的开始和结束日期。

其中哪一个是最合适的选择,或者还有其他我还没有见过的解决方案吗?

normalization database-design

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

2
推荐指数
1
解决办法
77
查看次数

规范化共享实体并应用约束

我正在寻找关于在不同实体之间共享的实体的特定“最佳实践”或“模式”,这些实体与众多实体中的一个有关系。

例如,可能有通用实体“地址”,它可用于存储客户、供应商、员工等的公共地址字段......

经验丰富的 DBA 会采取这种方式,还是宁愿将字段添加到相应的实体中?我也在考虑可维护性,可能(将来)会因实体而异的约束,诸如此类。

我很想得到有关该主题的任何权威或既定作品的参考。

normalization database-design design-pattern subtypes

2
推荐指数
1
解决办法
1060
查看次数

这个关系中的素数和非素数属性是什么?

R(HIJKLMNO)

L -> MNO
HI -> JKLMNO
J -> KL
K -> H
Run Code Online (Sandbox Code Playgroud)

嗨是一把钥匙。

因此,H 是一个素属性。

但是,H也属于非关键部分。

这个关系中的素数和非素数属性是什么?

normalization database-design

2
推荐指数
1
解决办法
7131
查看次数

如果同一产品有多个供应商,如何去除产品表中的数据冗余

我正在设计一个数据库,其中有不同的产品和供应商。例如,我有一个产品“手机”,比如说苹果 5S。这将通过我的网站从 Mapple、Mango 等不同供应商处出售。

我无法为每个供应商存储数据,因为这会导致数据冗余。我一直在考虑产品表的以下列:

  • 产品编号
  • 供应商编号
  • 产品名称
  • 价值
  • SKUID
  • 供应商名称
  • 还有很多...

在此处输入图片说明

我们可以看到产品名称每次都重复,导致数据冗余。

我主要关心的是如何避免数据冗余?如何设计Product表?

从评论中添加:

  • 产品和供应商之间将存在多对多关系。
  • 供应商和供应商是相同的。它是一个像店主一样的小组织,被我们列出来。
  • 将有许多不同的店主,他们都可能拥有相同的产品。它会每天增加。假设我们有 1000 个店主(供应商),每个店主有 100 个相同的产品,那么不需要的数据就会有 1000*100 行。
  • 表中有更正 Vendor 和 Supplier 是一样的。关于个人或人。他们永远不会成为供应商。

normalization database-design

2
推荐指数
1
解决办法
2541
查看次数

具有单独行中的值的“查找”表的名称

我希望在特定情况下命名。当您删除以逗号分隔的列并将其拆分为新表中的单独行时,这种类型的表称为什么?

在下面的例子中,我可以保留FavoriteFoods在最上面的桌子(阿尔伯特爱因斯坦会有“苹果派,汤”),但我希望每种食物都有自己的行。

第二个表是未标准化的“交叉连接”表吗?

如果你知道这个名字,请分享。知道名字后,我会做更多的研究。

上表中的 PersonID 和 Name 以及下表中的 PersonID 和 FavoriteFood

normalization database-design

2
推荐指数
1
解决办法
53
查看次数

ERD 直接生成 5NF 关系模式 - 这是可取的吗?

我得到了一个事件管理案例研究,以开发实体关系图 (ERD),并基于它检查生成的关系模式是否满足不同的范式。现在,我已经基于我开发的 SRS 开发了我的 ERD。

我遇到的问题是:当我将 ERD 转换为关系模式时,我的表已经规范化了。由于 ERD,我在规范化过程中没有什么可完成的,所以我很困惑。

我脑海中出现的另一个问题是这是否是一种理想的情况,我的意思是当我从 ERD 本身让我的所有关系正常化时,为什么我需要进行正常化?

换句话说,如果我们从 ERD 中获得了 5NF 中的数据库,那么为什么我们需要考虑规范化?

erd normalization database-design

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

这种关系是第三范式(3NF)吗?

我创建了一个名为 Customer 的关系并将其定义为:

在此处输入图片说明

我只是想知道它是否在3NF中?

我担心的是地址,因为多个客户可能有相同的地址。

我想,因为地址有重复的值,所以它不在 2NF 中。我该如何解决这个问题?

我应该将姓名作为名字、姓氏和地址作为(国家、城市、...)分开吗?

normalization database-design

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