Разговаривал недавно с одним товарищем. Он сейчас отвечает за обработку платежей в одном стартапе.
Стартапу 5 лет, несколько миллионов долларов инвестиций, много платящих клиентов.
Он готовил внутренний доклад на тему "зачем нужна нормализация базы данных".
В процессе разговора выяснилось, что данные у них не нормализованы.
У них нет никаких констрейнтов (внешних ключей, чеков), и главное - ни одного индекса.
И поэтому главная причина против нормализации была - джойны, сука, тормозят.
Для того, чтобы сделать по-нормальному - нужно собрать митап, рассказать плюсы и минусы, побороться за свое решение.
С базой работают несколько разработчиков, ни DBA, ни архитектора DB у них нет.
И это не считая того, что в начале года мне рассказывали, что все деньги считаются на фронте и нужная сумма присылается в процесссинг.
CEO и CTO из известных на рынке компаний.
50 сотрудников.
Возможно, даже ваша компания пользуется их сервисом :)
Если вас тоже заботит вопрос нормализации, то вот тут неплохо расписано в каких случаях можно себе позволить денормализовать данные:
https://m.habr.com/ru/company/sportmaster_lab/blog/497550/
Но запомните одно - если вы работаете с деньгами, то используйте нормализацию и настраивайте констрейнты.
И ладно, если вам не жалко своих пользователей и вы не боитесь потерять денег, счаржив их дважды или наоборот ни разу.
Но скорее всего все отчеты, которые делают ваши аналитики, содержат ошибки.
И бизнес принимает решения основываясь на невалидных данных.
Хотелось бы отдельно поднять вопрос "может ли стартап быть оправданием плохой инженерной культуры".
Но это длинный разговор, и мы к нему когда-нибудь вернемся :)
PS: если у вас есть проблемы с архитектурой базы, напишите мне в личку @antonrevyako и я постараюсь вам помочь бесплатно.
Чтоб не пришлось ставить 70-ядерный сервер под базу данных (привет, igooods :) )
Больше пользы от меня будет, если у вас Postgresql.
Но учтите, если весь ваш код на ORM (RoR, Django, Laravel, Hibernate и тд), то боюсь, что с архитектурой вам уже не поможет никто :)
Максимум, что можно будет сделать - написать отдельные запросы, которые вы потом сами будете интегрировать.
Post #410
270