为什么在已创建的表中添加列被视为不良做法?

时间:2013-06-06 08:44:52

标签: php mysql

我正在查看ALTER过程,将列添加到已创建的表中,并指定了许多动态添加列的答案,这不是一种好习惯。
我正在尝试创建一个额外的专栏来监控特定日子的出勤情况,因此就这个目标来说,改变表格仍然是不好的做法,因为我真的看不到它的方法吗?

4 个答案:

答案 0 :(得分:4)

这不是应该毫不犹豫地完成的事情,它需要进行规划,但如果你有不断变化的要求或者只是忘记了某些东西,那么:添加专栏。

从不添加列只是没有好的建议而且不现实。你应该能够

  • 适应不断变化的要求  要求仅在停止申请或商业破产时停止更改
  • 保持数据库规范化  您可以决定添加引用现有表格的整个表格,而不是添加列,从而避免使用已知的不良做法。请不要。
  • 修复规范/实施中的错误 我们都是人

但请注意添加列

  • 需要测试
  • 很容易破坏现有的应用程序
  • 需要测试
  • 需要规划
  • 并要求进行测试

答案 1 :(得分:1)

有太多方法可以理解你的问题,

  1. 您正在谈论将列添加到已存在的表中,但您不是从应用程序中动态地动态执行,而是在更新应用程序代码时执行此操作。在部署期间。只要保持应用程序和数据库结构同步,就可以了。
  2. 您正在谈论在应用程序运行时添加一个列,无论何时发生某些情况或数据处于需要添加表的状态。这很难做到。在某些情况下,在您创建预期不会更改且很少添加的内容类型的情况下,CMS可能没问题。但是,大多数情况下它表明设计不良,并会导致性能和复杂性问题。

答案 2 :(得分:1)

这取决于您何时想要进行这些更改。

如果由于系统的扩展功能而发生变化,那么它们就是恕我直言。

但是如果在使用应用程序时连续完成更改,那就是糟糕的设计。

一般来说,你要区分

  1. 数据描述语言(DDL),您可以在其中更改布局。这些主要是CREATE TABLEALTER TABLE等。只有在安装过程中,才能在应用程序的正常运行期间完成这些更改。

  2. 数据操作和查询语言(DML),您可以在其中操作数据库中的数据。这就是应用程序通常执行的操作:INSERTDELETESELECT

答案 3 :(得分:0)

数据库应该在项目的最初阶段创建,它应该保持不变。当您创建查询时,例如INSERT,并且您不使用命名colummns,它可以粉碎您的系统。

例如

INSERT INTO `table` VALUES('a','b','c');

而不是

INSERT INTO `table`(column1, column2, column3,...)
VALUES ('a', 'b', 'c',...)

有许多代码行可以崩溃。主要是基于列号而不是名称的那些。更改数据库可能会产生很多问题,如果系统很大,很难找到它们。

在表格中创建关系比创建大量列更好。

你应该阅读数据库规范化,“这是组织关系数据库的字段和表以最小化冗余和依赖性的过程。”