DEV Community

Serguey Shinder
Serguey Shinder

Posted on

Схема — это обещание; меняй её осторожно

Схема данных — это обещание. Каждый, кто читает или пишет в твою базу, полагается на то, что данные выглядят так, как договорились. И когда ты меняешь схему неосторожно, ты нарушаешь обещание, которое дал коду, о существовании части которого мог давно забыть.

Я усвоил это, выкатив «безобидное» изменение — переименовать колонку, ужать поле, поменять тип. В моей голове это было мелочью. На деле от этой колонки зависели отчёт, интеграция и старый сервис, о которых я даже не вспомнил. Изменение прошло — и три вещи, никак не связанные с моей задачей, тихо сломались, потому что обещание, на которое они опирались, внезапно перестало действовать.

С тех пор я меняю схему так, будто на неё смотрит кто-то, кого я не вижу, — потому что почти всегда так и есть. Не ломать, а расширять: сначала добавить новое рядом со старым, дать всем перейти, и только потом убрать старое. Не большой прыжок, а несколько маленьких, обратимых шагов. Каждый — так, чтобы старый код продолжал работать, пока не будет готов новый.

Это медленнее, чем одно резкое изменение. Но резкое изменение быстрое ровно до того момента, пока не станет очень медленным — когда придётся среди ночи разбираться, что именно ты сломал и у кого.

База данных редко принадлежит одному сервису. Это общий контракт, на который тихо опираются многие. Обращайся с изменениями схемы как с изменением публичного обещания: осторожно, обратимо, ступенчато. Данные почти всегда переживают код, который их создал, — а значит, и обещания о них надо держать дольше, чем кажется.

– Serguey Shinder

Top comments (0)