什么样的粒度更适合迁移?

What kind of granularity is better for migration?

这是我的案例:

有几个table: users, addresses, comments, posts.

我的困惑是哪种粒度更适合迁移?

我可以将所有 DDL 放在一个迁移文件和一个种子文件中,如下所示:

迁移:

npx knex migrate:make create_all_tables

种子:

npx knex seed:make all_tables

或者,将它们分开,为每个table创建迁移文件和种子文件?

迁移:

npx knex migrate:make create_users

npx knex migrate:make create_addresses

npx knex migrate:make create_posts

npx knex migrate:make create_comments

种子:

npx knex seed:make users

npx knex seed:make addresses

npx knex seed:make comments

npx knex seed:make posts

有什么想法吗?谢谢。

只需在单个迁移文件中创建所有表,除非您有一些特定的用例为什么要将这些创建分离到单独的文件中。您希望迁移文件的数量尽可能少。

通常您稍后会为每个向应用程序添加新功能的拉取请求添加一个迁移文件(以防模式发生任何变化)。一旦创建了迁移,就不应在以后对其进行修改,除非您仍处于初始实施阶段并且还没有任何服务器 运行ning 生产数据库。

对于种子,通常我推荐使用单个种子命令的完整数据集的粒度,它添加了一些有用的初始数据集用于测试(我实际上根本不会使用种子文件,但我会写一些 API 测试框架用于在 t运行cating 所有表之后轻松地将一些初始数据添加到数据库)。

PS。我经常看到的另一种反模式是通过回滚模式来清理测试数据库,然后再次 运行ning 迁移。您应该在测试套件启动时初始化数据库和 运行 迁移一次,之后在测试之间您只需 运行 分类所有表和 ID 序列并使用初始数据集再次填充数据库。