在数据库设计中,何时需要使用1对1关系?我认为,如果两个表之间存在1对1关系,则它们可以合并为一个表。这是正确的吗?
在数据库设计中,何时需要使用1对1关系?我认为,如果两个表之间存在1对1关系,则它们可以合并为一个表。这是正确的吗?
有时候在使用表锁方面是很有用的。当您向数据库中添加一个列时,整个表将被锁定,直到完全重写完毕。当您的数据库有10万行时,这几乎没有任何影响。但是如果您有1亿行或10亿行,那就完全是另一回事了...
如果您正在使用MVCC并且某些列经常被覆盖,则将其放置在单独的表中偶尔是有意义的,这样有助于避免占用过多空间的死行。可以说,自动清理最终会进行,但出于节省硬盘工作的考虑,最好在单独的表中清除一些int字段,而不是整个包含文本、varchar(n)和其他未知字段的行。
一个最后的原因是ORM中滥用select *
。例如,如果您存储图像或博客文章/文章,则将blob/text字段存储在单独的表中可能是有意义的。因为每次出于某种原因加载它时,您的ORM都会加载整个行。当您只需要图像或帖子的URL时,您最不想做的就是从数据库中拉取整个二进制/文本;但是您的ORM会这样做...一般而言是的。
唯一的例外可能是您想要将特定列的权限分配给不同的子集。
还要考虑到只有在两边都需要时才成立。
一个原因是将经常访问的数据放在一个表中,将极少访问的数据放在另一个表中。这样可以运行得更快,节省一些内存。
但除非我被强烈要求,否则我不会这样做。