Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Стоит ли хранить вычисляемое поле в БД в данном случае?

Вася Сухов Ученик (93), на голосовании 3 недели назад
Есть отношение operations, в котором есть свойство parent_id (внешний ключ на это же отношение). По этому полю можно вычислить, что одна операция имеет связь по внешнему ключу с какой-либо другой операцией. Разрабатываю REST API для сервиса по работе с операциями, мне нужно передавать значение has_childs. А значит, я должен вычислять для операций, есть ли у них связь с другими операциями.

Для работы с базой данных я использую ORM-библиотеку. Поэтому я работаю через обьекты классов сущностей, и только так. Хорошая ли идея добавить свойство has_childs в отношение operations, чтобы оно при получении из базы данных сразу записывалось в соотвествующее свойство обьекта класса?
В качестве альтернативы - загружать всегда список связанных операций, но этот список в 50% случаев и не нужен вовсе.
Не уверен, как правильно сделать. Хотелось бы послушать советы по этой проблеме.
В данном случае самым простым вариантом будет добавить поле в бд, но тогда получается нарушается нормализация.
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (472511) 1 месяц назад
Множественное число от child - children, а не childs. Поэтому я использую has_kids - так короче.
Нормализацию это не нарушает в строгом смысле. Нормализация касается только хранения данных, а это у тебя фактически метаданные.
Так что с этой точки зрения все хорошо.
Проблема тут в актуализации этого поля. Допустим, какую-то "операцию", что бы это ни значило, удалили из базы. Тебе надо будет найти ВСЕХ ее родителей и для них ВСЕХ проверить, остались ли у них детишечки еще. Нафиг-нафиг такое счастье.
Поэтому просто делай проверку. Можешь написать что-то хранимое для удобства и скорости оной.
Похожие вопросы