我正在查看 ALTER 过程以将列添加到已创建的表中,并且许多答案指定动态添加列不被认为是好的做法。
我正在尝试创建一个额外的列来监视特定日期的出勤率,因此就该目标而言,更改表格仍然是不好的做法,因为我真的看不出解决办法吗?
问问题
2263 次
4 回答
8
这不是应该随便做的事情,它需要计划,但如果您有不断变化的需求或只是忘记了某些东西,无论如何:添加列。
从不添加列根本不是好的建议,也不现实。你应该能够
- 适应不断变化
的需求 仅当申请终止或企业破产时才停止变化 - 保持数据库规范化
而不是添加列,您可以决定添加引用现有表的整个表,以避免所谓的不良做法。请不要。 - 修复规范/实现中的错误
我们都是人
但请记住,添加一列
- 需要测试
- 可以轻松破坏现有应用程序
- 需要测试
- 需要计划
- 并且需要测试
于 2013-06-06T08:57:59.880 回答
1
这取决于您何时要进行这些更改。
如果由于系统的扩展功能而发生更改,恕我直言。
但是,如果在使用应用程序时不断地进行更改,那就是糟糕的设计。
一般来说,你会区分
您在布局中进行更改的数据描述语言 (DDL)。这些主要是
CREATE TABLE
,ALTER TABLE
和类似的。这些更改不应在应用程序的正常运行期间进行,只能在安装期间进行。对数据库中的数据进行操作的数据操作和查询语言 (DML)。这是应用程序通常所做的:
INSERT
,DELETE
,SELECT
.
于 2013-06-06T09:01:04.930 回答
1
有太多方法可以理解你的问题,
- 您正在谈论将一列添加到已经存在的表中,但您并不是在动态地从您的应用程序中动态地执行此操作,而是在您更新应用程序代码时执行一次。在部署期间。只要您使应用程序和数据库结构保持同步,就可以了。
- 您正在谈论从应用程序、运行时添加列,每当发生某些情况或数据处于需要添加表的状态时。这很少是一件好事。在某些情况下,在 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 回答