DB设计用于组合两个一对一表

时间:2017-07-22 02:28:49

标签: database database-design

我有一个遗留应用程序,其下面的表格具有1对1映射

 customer (has already 40 columns)
 customer_additional_attributes(has 20 columns)

我的问题: - 如果将customercustomer_additional_attributes表合并在一起会不会更好的设计,因为它会在某个时候保存额外的连接或查询以获取数据 来自customer_additional_attributes

单个表是否存在任何缺点(如上述情况)但列数较多?

2 个答案:

答案 0 :(得分:1)

您拥有的数据格式称为“垂直分区”。这是实体的行在多个表之间拆分的时候。在规范化结构中,这是有问题的,因为行(例如)的插入不一定是原子的 - 它们会影响两个表。

但这样做有充分的理由。最明显的是当行太宽时。如果列太宽,它们根本不适合一个表,因此它们分布在多个表中。

同样,如果某些列更大 - 并且很少使用 - 那么将它们放在另一个表中可能会对性能产生重大影响。

在组合表之前,您应该认识到数据结构是有意的。它可能只是“懒惰”的结果。创建了第一个表 - 然后出现了其他属性,因此它们被放入另一个表中。或者,它可能是非常有意的,你想了解原因。

请注意,两个表之间的连接应该非常快,特别是如果两个表使用相同的主键。

答案 1 :(得分:-1)

你有多对多的关系,也许你必须创建中间表,一个用于客户,一个用于customer_attributes,一个用于customer_additional_attibutes,包含两个表的id