Этот пост был использован моим коллегой в качестве ссылки, но оба ответа не являются точными или информативными.
development_structure.sql - это низкоуровневый дамп схемы, который необходим, когда вы начинаете использовать проприетарные функции базы данных - хотите вы этого или нет, вы собираетесь использовать их в какой-то момент.
Относительно вопроса о том, хранить его или нет, есть некоторые споры. Вот информационный пост: http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/.
И мой взгляд на это следует.
Задача development_structure.sql - синхронизировать, для любого данного коммита, структуру базы данных с кодом, не имея предварительного знания структуры схемы, то есть не полагаясь на ранее существовавшее состояние схема для получения новой.
В двух словах, имея доступную структуру схемы, каждый раз, когда вы меняете ветку / коммит, вы загружаете ее напрямую и забываете об этом.
Это в основном справедливо для динамических и «переполненных» проектов, где разные ветви имеют различия в базовой структуре схемы.
Без сохранения структуры схемы вам необходимо будет всегда использовать существующую эталонную схему в вашей базе данных и переносить ее назад или вперед каждый раз, когда вы изменяете ветвь / фиксацию; несколько реальных случаев могут сделать этот процесс неэффективным (например, когда в другой ветви нет миграций, которые у вас есть в данный момент, или некоторые миграции не могут быть отменены).
Другая проблема - это автоматические сборки, которые страдают от тех же проблем, и, что еще хуже, они не могут применять ручные изменения.
Единственным недостатком является то, что для этого требуется определенная привычка - хранить ее каждый раз, когда вы запускаете миграцию. Легко сказать, но легко забыть.
Я не говорю, что вы не можете жить без development_structure.sql - конечно, вы можете.
Но если он у вас есть, то при смене ветки / коммита вы просто загружаете и забываете; если вы этого не сделаете, вам, возможно, придется пройти серию ручных шагов.