在 SQL 数据库中,一对一关系何时应位于同一个表中,何时应位于不同的表中?

Pen*_*ica 6 sql database foreign-keys relational-database

任何人都可以提供一些示例,说明在 SQL 数据库中何时将一对一关系保留在同一个表上是更好的选择,而何时将它们放在单独的表上更有意义?

use*_*531 2

当您有多个实体,它们都必须能够充当另一个实体的外键,并且“几个实体”既有公共属性又有唯一属性,并且您希望对唯一属性有 NOT NULL 约束(或者不那么重要)不想要一堆不适用于其他实体的唯一属性的 NULL 值)。即使您没有唯一/公共属性并且不关心 NULL 值,如果您希望每个子类型表以及超类型表都有单独的外部约束,您可能仍然希望这样做。这种策略称为超类型/子类型建模。

让我举一个例子。

人们

  • 身份证号(PK)
  • 姓名
  • 年龄

教师

  • id(PK 和 FK 到 people.id)
  • 年数教学 NOT NULL
  • 无论什么不为空

学生

  • id(PK 和 FK 到 people.id)
  • 等级不为空
  • 无论什么不为空

正如您所看到的,教师和学生可以拥有一个用于某些属性的通用表,并且每个人都可以拥有自己的 NOT NULL 唯一属性。此外,您可以将人员、教师和学生加入到其他表并保持引用完整性。

另一个应用程序“可能”是,如果您为每条记录拥有单独的数据库,其中一个记录有一些属性,另一个记录有一些属性,但是,我从未这样做过。