Должен ли я использовать рукописную схему для моих прогнозов, разработанную на языке высокого уровня (например, Python, Ruby), или я должен разрешить автогенерацию моего ORM-решения? В конце концов мне нужно будет мигрировать, не уничтожая все данные. Это нормально для привязки к конкретной СУБД, но было бы неплохо, если бы каким-то образом поддерживались такие функции, как ограничения и процедуры.ORM: рукописная схема или автогенерация?
ответ
Я никогда не хожу с ORM-сгенерированной схемой.
Я нахожу, что способы, с помощью которых ORM хочет сгенерировать схему, часто сводятся к тому, как я хочу, чтобы моя база данных была структурирована. Кроме того, и я знаю, что это тривиально, номенклатурная схема обычно бедна.
Структура базы данных имеет свои собственные ограничения, что я обнаружил, что обычно средства автоматической генерации ORM не рассматриваются полностью. И если вам захочется запустить отчеты в вашей базе данных позже (и вы это сделаете), то наличие хорошей структуры базы данных и дизайна очень важно.
Пусть ORM генерирует схему, которую он хочет. Тогда вы всегда можете менять вещи, которые слишком медленны или вы хотите по-другому. Но это позволяет вам быстро начать работу и иметь что-то рабочее, а люди ORM обычно знают, что они делают, когда дело доходит до создания схем.
См. this Coding Horror article и ссылки для обсуждения этой миграции, которые вам в конечном итоге нужно будет сделать. Планируйте это сейчас.
См. Также Martin Fowler on database evolution; Я особенно рекомендую понять, что генерация тестовых данных является частью настройки базы данных. Идея может быть немного недоразвита, поскольку нет четкого разграничения различных проблем в разных средах, развития против QA и производства.
Позвольте своему решению ORM генерировать его, но не только слепо используйте его; прочитайте это и здравомыслящий - проверьте это.
Я думаю, что это хороший способ начать работу, но мне всегда нужно было прекратить генерировать и управлять им самостоятельно, как правило, для целей производительности db. – 2008-09-24 13:23:48