如何确定列是组合在一个表中还是拆分成多个表?

时间:2010-02-12 17:27:09

标签: database database-design

我们应该总是组合一对一的表吗?

我有一个用户ID uid,一个包含基础知识的表:

uid, name, address, etc..

和另一个基本相同的表,在前一个用户表上使用外键

uid, stats, etc..

我应该把它们组合起来吗?什么时候才有意义?何时我不想?

3 个答案:

答案 0 :(得分:6)

Five Normal Forms for Relational Databases上查看此资源。在其中,您将找到一些指导,用于决定如何组合信息或将其拆分为表格。

简而言之,请遵循以下经验法则:

  • 每个表应代表一种类型的东西。
  • 主键应该唯一地区分该表与表中的其他项。
  • 表中的每一列都应该取决于主键值和主键值。
    • 如果单个表中的多个字段形成逻辑子组(例如地址的一部分),那么它们可能值得拥有自己的表。

答案 1 :(得分:3)

将第二个表中的字段填写不太常见时,将这些表分开是有意义的,因此使用第二个表可以在不填充该信息的情况下每行保存那么多内存。 / p>

在您的示例中,如果只有少数用户会拥有“统计信息等”,那么将该信息保存在单独的表中可能是个好主意。如果没有这些信息,请不要为那些用户创建一行。

答案 2 :(得分:1)

一对一关系是由ER model定义的事物。

这可以通过多种方式映射到关系模型,最广泛使用的是:

  • 使用两个实体的属性创建一个表。适用于严格的1:1关系。

  • 为每个实体创建一个表,并在另一个链接表中引用它们,并在两个链接字段上都有UNIQUE个约束。适用于(0-1):(0-1)关系以及为关系本身添加属性。

  • FOREIGN KEY字段上使用UNIQUE约束为每个实体创建一个表并引用另一个表。适用于1:(0-1)关系。

性能问题也会影响这种关系的关系表示的选择。

您可能希望在我的博客中阅读这篇文章: