Почему поле может не записаться при вставке данных в базу
Что проверяют
Умение искать причину системно, а не перебирать догадки. Между вашим объектом в памяти и строкой в таблице лежат сериализация, ORM, транзакция, ограничения схемы и права. Интервьюер смотрит, знаете ли вы эти слои и сможете ли назвать способ проверки для каждого, а не только список возможных причин.
Как отвечать
Идите сверху вниз и на каждом слое называйте, чем проверить.
- Приложение: поле не доехало до кода. Схема валидации отбросила лишний ключ, сериализатор его не описывает, при частичном обновлении в выборку попали только заданные поля. Проверка: залогировать то, что пришло, до создания объекта.
- ORM: поле не описано в модели или не попало в список сохраняемых колонок при выборочном сохранении. Проверка: включить вывод SQL и посмотреть реальный
INSERT, там видно, какие колонки ушли. - Транзакция: коммита не было, соединение закрылось раньше, исключение проглотили и получили откат. Классика: в тестах всё видно, в базе пусто.
- База: значение по умолчанию или триггер перезаписали то, что пришло; вставка с игнорированием конфликта тихо пропустила всю строку; тип обрезал или округлил значение; политика доступа не дала записать, и при этом запрос не упал.
- Схема: колонку добавили миграцией, но слой доступа работает по старому кэшу схемы и просто не шлёт её.
Сильный ответ заканчивается порядком действий: сначала лог запроса, потом ручной запрос тем же пользователем, потом проверка ограничений и прав.
Где спотыкаются
Считают, что объект изменён в памяти, значит записан. Пока транзакция не зафиксирована, в базе ничего нет, а добавление объекта в сессию само по себе запрос не отправляет.
Второе: ловят исключение широким обработчиком и молча продолжают. Ошибка ограничения превращается в «данные просто не сохранились», и искать причину приходится вслепую.
Третье: ищут баг в коде, когда дело в правах или в политике доступа на уровне строк. Такой запрос часто не возвращает ошибку, он просто не пишет ничего, и проверять это надо раньше, чем перечитывать логику.