我们何时需要在数据库设计中使用一对一的关系?在我看来,如果两个表是一对一的关系,它们可以组合成一个表。这是真的吗?
答案 0 :(得分:10)
大型表的垂直分区以减少I / O和缓存需求 - 经常与很少查询的单独列。
当alter table
“过于昂贵”时,将列添加到生产系统。
垂直分区以从表(连接)消除中受益 - 提供优化器 支持它(再次减少I / O和缓存)。
Anchor modeling - 类似于4,但下至 6NF 。
答案 1 :(得分:1)
有时它对表锁很有用。将列添加到数据库时,整个表将被锁定,直到完全重写为止。当您的数据库有100k行时,这几乎没有影响。但如果你有100M行或1B行,那就完全不同了......
避免占用太多空间的死行也很有用。如果您使用MVCC并且某些列经常被覆盖,则将它们放在单独的表中通常是有意义的。可以说,自动吸尘最终会开始,但是为了节省硬盘驱动器的工作,更好地在一个单独的表中抽真空几个int字段,而不是整堆文本,varchar(n)以及谁知道还有什么。
最后一个原因是在ORM中滥用select *
。例如,如果您要存储图像或博客文章/文章,则可以将blob / text字段存储在单独的表中。因为每次因某种原因而加载时,您的ORM将加载整行。当您只需要图像或帖子的URL时,您最不希望的是从数据库中提取整个二进制文本/文本;然而你的ORM会做到这一点...
答案 2 :(得分:0)
如果您希望以不同的方式为列的子集分配权限,则可能有一个例外。
也认为只有在需要双方时才会这样。
答案 3 :(得分:0)
一个原因是将频繁访问的数据放在一个表中,而极少访问的数据放在另一个表中。它会运行得更快并节省一些内存。
但在我这样做之前,我必须先扭伤我的手臂。