我有一个遗留应用程序,其下面的表格具有1对1映射
customer (has already 40 columns)
customer_additional_attributes(has 20 columns)
我的问题: - 如果将customer
和customer_additional_attributes
表合并在一起会不会更好的设计,因为它会在某个时候保存额外的连接或查询以获取数据
来自customer_additional_attributes
?
单个表是否存在任何缺点(如上述情况)但列数较多?
答案 0 :(得分:1)
您拥有的数据格式称为“垂直分区”。这是实体的行在多个表之间拆分的时候。在规范化结构中,这是有问题的,因为行(例如)的插入不一定是原子的 - 它们会影响两个表。
但这样做有充分的理由。最明显的是当行太宽时。如果列太宽,它们根本不适合一个表,因此它们分布在多个表中。
同样,如果某些列更大 - 并且很少使用 - 那么将它们放在另一个表中可能会对性能产生重大影响。
在组合表之前,您应该认识到数据结构是有意的。它可能只是“懒惰”的结果。创建了第一个表 - 然后出现了其他属性,因此它们被放入另一个表中。或者,它可能是非常有意的,你想了解原因。
请注意,两个表之间的连接应该非常快,特别是如果两个表使用相同的主键。
答案 1 :(得分:-1)
你有多对多的关系,也许你必须创建中间表,一个用于客户,一个用于customer_attributes,一个用于customer_additional_attibutes,包含两个表的id