2

我正在查看 ALTER 过程以将列添加到已创建的表中,并且许多答案指定动态添加列不被认为是好的做法。
我正在尝试创建一个额外的列来监视特定日期的出勤率,因此就该目标而言,更改表格仍然是不好的做法,因为我真的看不出解决办法吗?

4

4 回答 4

8

这不是应该随便做的事情,它需要计划,但如果您有不断变化的需求或只是忘记了某些东西,无论如何:添加列。

从不添加列根本不是好的建议,也不现实。你应该能够

  • 适应不断变化
    的需求 仅当申请终止或企业破产时才停止变化
  • 保持数据库规范化
    而不是添加列,您可以决定添加引用现有表的整个表,以避免所谓的不良做法。请不要。
  • 修复规范/实现中的错误
    我们都是人

但请记住,添加一列

  • 需要测试
  • 可以轻松破坏现有应用程序
  • 需要测试
  • 需要计划
  • 并且需要测试
于 2013-06-06T08:57:59.880 回答
1

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

如果由于系统的扩展功能而发生更改,恕我直言。

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

一般来说,你会区分

  1. 您在布局中进行更改的数据描述语言 (DDL)。这些主要是CREATE TABLEALTER TABLE和类似的。这些更改不应在应用程序的正常运行期间进行,只能在安装期间进行。

  2. 对数据库中的数据进行操作的数据操作和查询语言 (DML)。这是应用程序通常所做的:INSERT, DELETE, SELECT.

于 2013-06-06T09:01:04.930 回答
1

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

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

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

例如

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

代替

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

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

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

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

于 2013-06-06T08:49:49.793 回答