【问题标题】:MySQL - When to have one to one relationshipsMySQL - 何时建立一对一关系
【发布时间】:2014-01-07 02:59:18
【问题描述】:

什么时候应该使用一对一的关系?什么时候应该添加新字段,什么时候应该将它们分开到一个新表中?

在我看来,每当您对字段进行分组和/或该组往往是可选的时,您都会使用它。是吗?

我正在尝试为一个对象创建表,但对所有内容进行分组/分离需要大约 20 次连接,甚至需要 4 级深度。

我做错了吗?我该如何改进?

【问题讨论】:

标签: mysql database database-design join one-to-one


【解决方案1】:

首先,我强烈推荐阅读about Normal Forms

规范化的关系数据库非常有用,正确地做到这一点是 Hibernate 等工具存在的原因 - 以帮助管理对象表示为关系映射和对象作为程序实体之间的差异。

任何具有一对一映射的东西都应该在同一个表中。一个人只有一个名字,一个姓氏。这些在逻辑上应该在同一个表中。没有必要引用名称表 - 特别是因为几乎没有关于名称的额外数据可以存储。显然,这并不总是正确的(词源数据库可能希望完全做到这一点),但对于大多数用途,您并不关心名称的来源 - 实际上您只需要名称。

因此,请考虑所代表的对象。一个人有一些单一的数据点,以及一些一对多的关系(例如,他们住过的地址)。一对多和多对多几乎总是需要一个单独的表(或两个,多对多)。遵循这两个准则,您可以非常快速地获得规范化的数据库。

请注意,应尽可能避免使用可选字段。通常情况下,有一个单独的表来保存该字段并引用回原始表。尽量保持你的桌子精简。如果一个字段不太可能有什么东西,它可能应该是它自己的表中的一行。许多此类属性都建议使用“属性”表,该表可以保存特定类型的任意可选属性(即,应用于“人员”)。

【讨论】:

  • @RS7 这对您有帮助吗?如果是这样,您应该接受回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多