Если вы воспользуетесь первым предложением, с вашим приложением будет ужасно работать, а производительность поразит вас своей ужасностью, и пользователи придут к вам, чтобы задушить вас. (Хорошо, так что там немного гиперболы).
Самое первое правило проектирования базы данных - хранить только один фрагмент информации в каждом поле.
С первым дизайном, когда вам нужно знать, сколько каждый клиент потратил по типам платежей, вы не сможете легко или быстро получить эти данные.
Вам нужна таблица с названием «Типы начислений», в которой содержатся определения типов. Если пользователь добавляет новый, он попадает в эту таблицу. Тогда у вас есть таблица расходов, аналогичная показанной во втором примере. Сохраняя стандартные типы и делая их болезненными, но при этом добавляя их, становится менее вероятным, что у вас будет 4317 типов начислений, которые означают одно и то же. Это важно позже, когда вы хотите создавать отчеты по данным в вашей базе данных.
У вас будет значительно лучшая производительность при запросе второй возможности, чем первой, при условии правильного индексирования.
Если ваша организация честно даже подумала об использовании первой структуры, то вам необходимо немедленно нанять опытного dba, поскольку существует явное недопонимание относительно того, как проектировать базу данных. Если вы ожидаете тысячи ежедневных платежей, вам нужно учитывать производительность в дизайне, а не повышать ее позже. Оптимальная оптимизация не означает, что оптимизация вообще не рассматривается. Производительность базы данных - это одна из трех самых важных вещей, которые вам нужно спроектировать (две другие - это целостность данных и безопасность).