这是我的案例:
有几个表: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
有什么想法吗?谢谢
只需在一个迁移文件中创建所有表,除非您有一些特定的用例,为什么要将这些创建分离为单独的文件。您希望尽量减少迁移文件的数量。
通常,您稍后会为每个pull请求添加一个迁移文件,为应用程序添加新功能(以防架构发生任何更改)。一旦创建了迁移,以后就不应该修改它,除非您仍处于初始实现阶段,并且还没有任何服务器运行生产数据库。
对于种子,我通常建议使用单个种子命令来实现完整数据集的粒度,这会为测试添加一些有用的初始数据集(我实际上根本不会使用种子文件,但我只会编写一些API,测试框架使用这些API来在截断所有表后轻松地向DB添加一些初始数据)。
PS。我经常看到的另一种反模式是通过回滚模式来清理测试数据库,然后再次运行迁移。您应该在测试套件启动时初始化数据库并运行迁移一次,然后在测试之间截断所有表和id序列,然后用初始数据集再次填充DB。