MySQL - 何时拥有一对一的关系

RS7*_*RS7 0 mysql database database-design join one-to-one

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

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

我正在尝试为一个对象创建表,但是分组/分离一切都需要我大约20个连接,有些甚至是4个级别.

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

Nat*_*ord 6

首先,我强烈建议您阅读普通表格

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

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

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

请注意,如果可能的话,应该避免使用可选字段.通常,这是一个具有单独的表的情况,该表将字段与引用一起返回到原始表.尽量让你的桌子保持精益.如果一个字段不太可能有某些东西,它可能应该是它自己的表中的一行.许多这样的属性建议一个'Property'表,它可以保存特定类型的任意可选属性(即,应用于'Person').