我们应该从我们的后端代码之外创建MySQL数据库/表吗?



我是一个新的MySQL学习者,喜欢在NodeJS应用程序中使用它。从我以前对MongoDB的了解,我们需要的所有表将由MongoDB自动创建。我们只需要连接到MongoDB,并使用createsave命令,它可以找到表,并在里面放一些东西或创建表,如果它不存在。

但是从MySQL教程中,我看到到目前为止,他们通过在MySQL shell/bash中直接执行SQL代码或使用MySQL Workbench等应用程序手动创建数据库。

所以我想确定哪种方式是正确的?我应该在运行我的Node应用程序之前创建我的表,还是还有一种方法,当需要用户使用应用程序时,在代码中动态创建表是一种好方法?如果第二种方法是更好的方法,我怎么做呢?是否有从Node应用程序内部创建数据库的代码示例?

同样的问题也适用于数据库。在我们的Node应用程序中创建它们是一个好方法吗?

在基于sql的应用程序中,标准表是在安装应用程序时创建的,并赋予它固定的结构。表结构仅在程序更新期间更改,因为结构更改可能是一个非常昂贵的操作。初始表的创建和后续的更改都可以通过sql脚本或应用程序代码来完成——这两种做法都是可以接受的。但是主要的观点是:永久表不是动态创建的。

一些复杂的脚本可能需要在运行中创建和销毁临时表,但大多数将隐式完成(例如数据库引擎可能将子查询的结果集具体化为临时表),而不是显式完成(应用程序代码执行create temporary table语句)。

理由:rdbms具有严格的、不灵活的数据结构,该结构针对数据存储和检索速度进行了优化。任何引入灵活性的解决方案都与关系理论不一致,并且会有它的缺点(参见Bill Karwin关于这个主题的出色回答,特别是最后两段)。

然而,NoSQL解决方案更注重灵活性,而不是数据存储。例如,Mongodb甚至没有带有行和列的表。它具有由文档组成的集合,集合中的每个文档可能具有不同的属性。这就是为什么您可以动态地创建这些集合和文档。

都有可能。

您可以创建一段代码来检查模式并在模式不正确时更新它(有很多工具和所有语言)。

根据我的经验,在大多数情况下,我们倾向于先手工创建表、索引、视图等,然后运行应用程序。对于较大的公司/项目,他们经常使用工具。我个人在Java世界里见过很多flyway。

在任何情况下,最重要的是您的创建脚本是幂等的。为此,您可以使用if not exists语句:https://dev.mysql.com/doc/refman/8.0/en/replication-features-create-if-not-exists.html

相关内容

最新更新