首页 > 解决方案 > 如何向关系数据库表中添加额外的列?

问题描述

我有一个表ABC,它有一些核心列。我想根据用户有一些额外的列。例如, user1可能具有列b、c、d,而user2可能具有列c、d、f

我应该在同一个表( ABC )中添加列,还是应该为额外的列添加另一个表,其中每行代表具有以下结构的列:

| ABCID | 列名| 列值|

标签: postgresqldatabase-design

解决方案


任何一种方法都是可行的。

将列放在一个表中的优点基本上是简单。访问列很容易。如果记录不使用列,则值为NULL.

缺点可能是性能。固定宽度的数据类型(例如整数)通常会占用数据页上的空间,即使是NULL(尽管这取决于数据库)。因此,未使用的值仍然会使记录变大。(这可能适用于字符串,也可能不适用。)更宽的记录需要更多空间,这会降低某些操作的数据库性能。这在列式数据库中不是问题。

另一种方法是有一个单独的表。因为是一对一的关系,所以两张表应该有相同的主键。这也是可行的——在两种情况下可能是性能上的胜利:

  • 当大多数行在列中没有值时。
  • 当许多查询不需要额外的列时。

但是这两种方法都是合理的。根据其他因素,其中一个可能更合理。


推荐阅读