MySQL - 何时建立一对一关系

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

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

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

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

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

最佳答案

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

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

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

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

请注意,应尽可能避免使用可选字段。通常这是一个单独的表保存字段并引用回原始表的情况。尽量保持 table 精简。如果一个字段不太可能有东西,它可能应该是它自己的表中的一行。许多这样的属性表明一个“属性”表可以包含特定类型的任意可选属性(即,应用于“人”)。

关于MySQL - 何时建立一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097872/

相关文章:

database - ES管道聚合-合并多个存储桶

mysql - 如何处理用户个人资料字段的隐私?

mysql - 链接表可以有两个互斥的列吗?

java - 使用 hibernate ,一个表可以有两列相同的外键吗?

c# - OleDbDataReader 如何读取数字类型?

mysql - 这些数据库模式中哪一个更可取?

数据库设计 - 管理文档

php - PHP 中位标志的最佳实践

php - 如何使用导出按钮在 View 中单击将数据库表导出到 Codeigniter 中的 Excel 工作表

mysql - SQL查询使用子查询选择每个学生的出勤率不能使用父查询中的行