我有一个关系:
\n\nR4 = {{T,U,V}, {T \xe2\x86\x92 U, U \xe2\x86\x92 T, T \xe2\x86\x92 V}}\nRun 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}。
维基百科上有 3NF 的替代定义:
\n\n\nCarlo 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 和 …
我有 3 种不同类型的数据集:
所有这 3 个都有相同类型的子表,其中将有指向这些表的外键。
什么类型的设计最好?
main_type列表示每条记录是活动、通知还是交易。子表将只有一个外键列。我的数据库以以下方式存储有关人员的信息。有一个Person包含常见个人信息字段的 表格;姓名、出生日期、性别等。
每个人的联系信息以ContactInformation1:1 的关系保存在表中。
最后,我们存储数据的组织中每种特定类型的人都有单独的表,与 Person
我的Student桌子有点问题。基本上,我的客户现在想要存储学生的家庭住址和学期地址。但我不确定如何处理这个问题。
我看到三种可能的选择/解决方案:
ContactAddressMapping在Person和之间创建连接表(例如)ContactInformation。TermTimeAddress与 1:1 关系的表StudentStudent表中添加额外字段以保存术语时间地址。现在这里是我看到的每个选项的主要“问题”:
联结表将允许为一个人存储多个地址,但我们只需要为学生(现在)这样做。如果不使用某种布尔字段,则也无法确定哪个地址是家庭/学期时间地址,该字段在该表中似乎是毫无意义的信息,因为它仅对学生而言是唯一的。
创建一个新表将术语时间地址与主要地址分开,但这些感觉像是重复,因为我基本上是在创建具有相同字段的特定类型的地址,减去电话号码和电子邮件地址等内容。
将字段添加到Student似乎我用应该在其他地方的信息把表格弄得乱七八糟。该表格应仅用于提供有关该学生的信息,例如他们的学校、学习领域以及安置的开始和结束日期。
其中哪一个是最合适的选择,或者还有其他我还没有见过的解决方案吗?
我正在寻找关于在不同实体之间共享的实体的特定“最佳实践”或“模式”,这些实体与众多实体中的一个有关系。
例如,可能有通用实体“地址”,它可用于存储客户、供应商、员工等的公共地址字段......
经验丰富的 DBA 会采取这种方式,还是宁愿将字段添加到相应的实体中?我也在考虑可维护性,可能(将来)会因实体而异的约束,诸如此类。
我很想得到有关该主题的任何权威或既定作品的参考。
R(HIJKLMNO)
L -> MNO
HI -> JKLMNO
J -> KL
K -> H
Run Code Online (Sandbox Code Playgroud)
嗨是一把钥匙。
因此,H 是一个素属性。
但是,H也属于非关键部分。
这个关系中的素数和非素数属性是什么?
我正在设计一个数据库,其中有不同的产品和供应商。例如,我有一个产品“手机”,比如说苹果 5S。这将通过我的网站从 Mapple、Mango 等不同供应商处出售。
我无法为每个供应商存储数据,因为这会导致数据冗余。我一直在考虑产品表的以下列:
我们可以看到产品名称每次都重复,导致数据冗余。
我主要关心的是如何避免数据冗余?如何设计Product表?
我希望在特定情况下命名。当您删除以逗号分隔的列并将其拆分为新表中的单独行时,这种类型的表称为什么?
在下面的例子中,我可以保留FavoriteFoods在最上面的桌子(阿尔伯特爱因斯坦会有“苹果派,汤”),但我希望每种食物都有自己的行。
第二个表是未标准化的“交叉连接”表吗?
如果你知道这个名字,请分享。知道名字后,我会做更多的研究。
我得到了一个事件管理案例研究,以开发实体关系图 (ERD),并基于它检查生成的关系模式是否满足不同的范式。现在,我已经基于我开发的 SRS 开发了我的 ERD。
我遇到的问题是:当我将 ERD 转换为关系模式时,我的表已经规范化了。由于 ERD,我在规范化过程中没有什么可完成的,所以我很困惑。
我脑海中出现的另一个问题是这是否是一种理想的情况,我的意思是当我从 ERD 本身让我的所有关系正常化时,为什么我需要进行正常化?
换句话说,如果我们从 ERD 中获得了 5NF 中的数据库,那么为什么我们需要考虑规范化?
我创建了一个名为 Customer 的关系并将其定义为:

我只是想知道它是否在3NF中?
我担心的是地址,因为多个客户可能有相同的地址。
我想,因为地址有重复的值,所以它不在 2NF 中。我该如何解决这个问题?
我应该将姓名作为名字、姓氏和地址作为(国家、城市、...)分开吗?