改变大表的结构有多糟糕?

时间:2009-12-24 09:19:00

标签: mysql database database-design

我的目标数据库是MySQL,但我们试着让这个问题更“通用”。我即将创建一个框架,根据需要修改表结构。表可能有一天会包含数十万条记录。我可能会添加一个列,重命名一个列,甚至更改列的类型(假设这没什么不可能的,即我可能只将数字列更改为varchar列),或者我也可能删除整列。但在大多数情况下,我只会添加列。

有人告诉我这是一个非常坏主意。他说非常响亮而清晰,但没有进一步的论证。所以你怎么看?馊主意?为什么呢?

4 个答案:

答案 0 :(得分:2)

在大多数数据库中,添加和重命名列是只更改表元数据的简单操作。实际上,您应该验证您正在使用的MySQL存储引擎的情况。删除列也应该是轻量级的。

相比之下,更改列的类型是一项密集型操作,因为它涉及实际为表中的每一行创建数据。同样,添加一个列并填充它(而不是将新列的值保留为null)。

答案 1 :(得分:2)

这是一个坏主意。

您将拥有使用这些列的客户端应用程序,因此无论何时重命名或删除任何列,都会破坏其代码。

有时可能需要更改列的类型,但这不是您经常需要做的事情。如果列是数字并且您使用它进行计算,则无法将其更改为varchar类型。如果您不需要它进行任何计算,并且您希望以后使用非数字字符,为什么不首先将其定义为varchar?

答案 2 :(得分:1)

构建数据库是为了做好一些事情:处理数据完整性,参照完整性和事务完整性,仅举三个例子。与表结构混淆(当它们具有现有数据和关系时)可能同时违反所有这三个方面。

如果您想调整向用户显示数据的方式(限制列的可见性,重命名列等),那么通过视图和数据公开您的数据,您可以更好地 做得更好根据需要改变他们的定义。但是不要把桌子留下来!

答案 3 :(得分:1)

这是非常有害的,应该避免,因为数据的完整性受到干扰,如果你有硬编码的查询或不正确的ORM,你的查询也会失败。 如果你这样做是谨慎的,如果它现在首先备份你的数据库。