这是我的情况:
有几个表:users
,addresses
,comments
,posts
。
我的困惑是哪种粒度更适合迁移?
我可以将所有DDL
放在一个迁移文件和一个种子文件中,如下所示:
迁移:
npx knex migrate:make create_all_tables
种子:
npx knex seed:make all_tables
还是将它们分开,为每个表创建迁移文件和种子文件?
迁移:
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
有什么想法吗?谢谢。
答案 0 :(得分:0)
只需在单个迁移文件中创建所有表,除非您有一些特定的用例,为什么要将这些创建分隔为单独的文件。您希望尽量减少迁移文件的数量。
通常,稍后您将为每个向应用程序添加新功能的请求请求添加一个迁移文件(以防方案中的任何更改)。创建迁移后,除非以后仍处于初始实施阶段并且还没有任何服务器在运行生产数据库,否则永远不要修改它。
通常,对于种子,我建议使用单个种子命令对完整数据集进行粒度处理,这会添加一些有用的初始数据集进行测试(我实际上根本不会使用种子文件,但是我只会编写一些测试框架使用的API以便在删除所有表后轻松地向数据库添加一些初始数据。
PS。我看到的另一种反模式是通过回滚架构然后再次运行迁移来清理测试数据库。您应该在测试套件启动时初始化数据库并仅运行一次迁移,然后在测试之间进行操作,您只需截断所有表和ID序列,然后使用初始数据集再次填充数据库。