Php 为什么在已经创建的表中添加列会被认为是不好的做法?

Php 为什么在已经创建的表中添加列会被认为是不好的做法?,php,mysql,Php,Mysql,我正在研究ALTER过程,将一列添加到已经创建的表中,许多答案都指出动态添加列并不是一种好的做法。 我正试图创建一个额外的列来监控某一天的出勤情况,所以相对于这个目标来说,更改表仍然是一种糟糕的做法,因为我真的看不到解决方法吗?数据库应该在项目一开始就创建,并且应该保持原样。当您创建查询(例如INSERT)时,如果您不使用命名列,它可能会破坏您的系统 比如说 INSERT INTO `table` VALUES('a','b','c'); 而不是 INSERT INTO `table`(col

我正在研究ALTER过程,将一列添加到已经创建的表中,许多答案都指出动态添加列并不是一种好的做法。

我正试图创建一个额外的列来监控某一天的出勤情况,所以相对于这个目标来说,更改表仍然是一种糟糕的做法,因为我真的看不到解决方法吗?

数据库应该在项目一开始就创建,并且应该保持原样。当您创建查询(例如INSERT)时,如果您不使用命名列,它可能会破坏您的系统

比如说

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

INSERT INTO `table`(column1, column2, column3,...)
VALUES ('a', 'b', 'c',...)
有很多行代码可能会崩溃。大多数是基于列编号而不是名称的。更改数据库可能会产生很多问题,如果系统相当大,则很难找到这些问题

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


此外,您还应该了解数据库规范化,它“是组织关系数据库的字段和表以最小化冗余和依赖性的过程。”

数据库应该在项目一开始就创建,并且应该保持原样。当您创建查询(例如INSERT)时,如果您不使用命名列,它可能会破坏您的系统

比如说

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

INSERT INTO `table`(column1, column2, column3,...)
VALUES ('a', 'b', 'c',...)
有很多行代码可能会崩溃。大多数是基于列编号而不是名称的。更改数据库可能会产生很多问题,如果系统相当大,则很难找到这些问题

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


此外,您还应该了解数据库规范化,它“是组织关系数据库的字段和表以最小化冗余和依赖性的过程。”

这不是随意做的事情,需要计划,但如果您有不断变化的需求或只是忘记了什么,无论如何:添加列

从不添加专栏根本不是什么好建议,也不现实。您应该能够

  • 适应不断变化的需求
    只有当应用程序中断或业务破产时,需求才会停止更改
  • 保持数据库正常化
    您可以决定添加一个引用现有表的整个表,而不是添加一个列,以避免这种被称为错误的做法。请不要
  • 修复规范/实施中的错误
    我们都是人
但请记住,添加一列

  • 需要测试
  • 可以轻松破坏现有的应用程序
  • 需要测试
  • 需要计划
  • 需要测试

这不是一件可以随意完成的事情,它需要计划。但是,如果您的需求在变化,或者只是忘记了什么,请务必添加该列

从不添加专栏根本不是什么好建议,也不现实。您应该能够

  • 适应不断变化的需求
    只有当应用程序中断或业务破产时,需求才会停止更改
  • 保持数据库正常化
    您可以决定添加一个引用现有表的整个表,而不是添加一个列,以避免这种被称为错误的做法。请不要
  • 修复规范/实施中的错误
    我们都是人
但请记住,添加一列

  • 需要测试
  • 可以轻松破坏现有的应用程序
  • 需要测试
  • 需要计划
  • 需要测试

    • 理解你的问题的方法太多了

    • 您谈论的是将列添加到已经存在的表中,但实际上您并不是在应用程序中动态地执行此操作,而是在更新应用程序代码时执行一次。在部署期间。只要保持应用程序和数据库结构同步,就可以了
    • 您所说的是,每当发生某种情况或数据处于需要添加表的状态时,从应用程序runtime添加一列。这很少是一件好事。在CMS中,在某些情况下,您创建的内容类型预计不会更改,并且很少添加,这可能是正常的。然而,大多数情况下,这表明设计不好,会导致性能和复杂性问题

    • 有太多的方法来理解你的问题

    • 您谈论的是将列添加到已经存在的表中,但实际上您并不是在应用程序中动态地执行此操作,而是在更新应用程序代码时执行一次。在部署期间。只要保持应用程序和数据库结构同步,就可以了
    • 您所说的是,每当发生某种情况或数据处于需要添加表的状态时,从应用程序runtime添加一列。这很少是一件好事。在CMS中,在某些情况下,您创建的内容类型预计不会更改,并且很少添加,这可能是正常的。然而,大多数情况下,这表明设计不好,会导致性能和复杂性问题

    • 这取决于您希望何时进行这些更改

      如果由于系统的扩展功能而在过程中发生更改,则这些更改是正常的

      但是,如果在使用应用程序的过程中不断地进行更改,那就是糟糕的设计

      一般来说,您会区分

    • 在布局中进行更改的数据描述语言(DDL)。这些主要是
      CREATE TABLE
      ALTER TABLE
      等。这些更改不应在应用程序正常运行期间进行,而应仅在安装期间进行