这是分解表并具有1-1表关系的好例子吗?

时间:2010-02-23 21:40:32

标签: mysql database-design

我在表格中存储有关网站的信息。一组信息是关于网站域名的whois数据。这组数据包含大约40个字段,每个记录与单个网站相关。我没有要求跟踪更新。我可以将所有whois数据放在网站表中,但是在具有1-1映射的新表中将域whois信息显示为“更干净”且更直观。

在这种情况下,最佳解决方案是什么?一个包含许多字段的表总是优于两个较小的表并且具有不必要的连接吗?

5 个答案:

答案 0 :(得分:4)

将此作为一个表保留并使用视图来“简化”消费者的数据可能会更容易。

需要考虑的一件事是,您的需求可能会随着时间的推移而发生变化,您会发现您需要更改分割表的方式。如果您只是使用视图,则可以非常简单地更改视图,而无需弄清楚如何将数据从一个表移动到另一个表。

答案 1 :(得分:2)

join总是很昂贵。我真正考虑拆分这两个的唯一原因是你经常查询一组列,而很少查询另一组。

答案 2 :(得分:2)

这取决于您的申请。您的应用对网站数据做了什么?它与相关的whois数据有什么关系?

如果您经常访问网站数据,并且很少访问whois数据(或其他方式),那么将它们分开是有意义的。这不是一种关系或逻辑方式或推理,而是一种实用的,与性能相关的原因。从纯粹的关系角度来看,它必须在同一个表格中。

如果我考虑一下,我很难想出一个真正的世界真正的1:1例子,它在纯粹的关系模型中是有意义的。对于1:0示例,情况并非如此:子类型自然地建模为父表,在子表中以1:0方式具有一个或多个可选相关行。

答案 3 :(得分:1)

如果连接的性能损失没有打扰你,将数据分成两个表可能是有意义的(不需要避免重复的列名等)。

如果两组数据具有非常不同的更新/读取频率,则拆分可以通过将很少使用的字段移除到单独的表中来提高缓存命中率。但是,作为所有表现的东西,这非常依赖于你的工作量,可能会在一瞬间发生变化,与你的关系模型不一致,应该通过基准测试。

答案 4 :(得分:1)

加入不一定要花费任何费用。根据表的存储方式,连接可以是无操作。请注意,这样的表通常不是1-1,因为外键在约束的一侧始终是可选的。因此,如果whois数据不适用于每一行,那么这是一个有两个表的好理由。