- 已关闭**。此问题为opinion-based。当前不接受答案。
- 想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。
昨天关门了。
社区正在审查是否从昨天开始重新讨论这个问题。
Improve this question
我是一个新的MySQL
学习者,喜欢在NodeJS
应用程序中使用它。从我以前对MongoDB
的了解来看,我们需要的所有表都将由MongoDB自动创建。我们只需要连接到MongoDB,使用create
或save
命令,它就可以找到表并在其中放置一些东西,或者如果表不存在就创建表。
但是从MySQL教程中我看到,到目前为止,他们通过直接在MySQL shell/bash中执行SQL代码或使用MySQL Workbench
等应用程序手动创建数据库。
所以我想确定哪种方式是正确的?我应该在运行Node应用之前创建我的表吗?或者还有一种方式,当用户需要使用应用时,在代码中动态创建表是一种很好的方式?如果第二种方式更好,我该怎么做?有没有从Node应用内部创建数据库的代码示例?
此外,对于数据库也有同样的问题。我们可以或者这是一个好方法从我们的节点应用程序内部创建它们吗?
2条答案
按热度按时间du7egjpx1#
在基于SQL的应用程序中,当您安装应用程序时,会创建标准表,并为其提供固定结构。表结构仅在程序更新期间更改,因为结构更改可能是一个非常昂贵的操作。初始表创建和后续更改可以通过SQL脚本或应用程序代码完成-这两种做法都是可以接受的。但要点是:永久表不是即时创建的。
一些复杂的脚本可能需要即时创建和销毁临时表,但大多数都是隐式的(例如数据库引擎可能将子查询的结果集具体化为临时表),而不是显式的(应用程序代码执行
create temporary table
语句)。基本原理:RDBMS有一个严格的、不灵活的数据结构,它是针对数据存储和检索速度而优化的。任何引入灵活性的解决方案都与关系理论不一致,并且会伴随着它的缺点(参见Bill Karwin的excellent answer on this subject,特别是最后两个pragraph)。
然而,NoSQL解决方案更注重灵活性,而不是数据存储。例如,Mongodb甚至没有包含行和列的表。它有由文档组成的集合,集合中的每个文档可能有不同的属性。这就是为什么你可以动态地创建这些集合和文档。
vxf3dgd42#
两者皆有可能。
您可以创建一段代码来检查模式,如果不是,则更新它(有很多工具适用于所有语言)。
根据我的经验,在大多数情况下,我们倾向于先手工创建表、索引、视图等,然后再运行应用程序。对于较大的公司/项目,他们经常使用工具。我个人在Java世界中见过很多Flyway。
在任何情况下,最重要的是你的创建脚本是幂等的,为此,你可以使用if not exists语句:https://dev.mysql.com/doc/refman/8.0/en/replication-features-create-if-not-exists.html