Оба варианты могут быть выбраны.
Второй вариант идеологически верный, он в каком то смысле проще (хотя как знать), ожидается большинством разработчиков, которые будут ковырять ваш код а так же применимы к любым ОРМ библиотекам.
Но если идеологически, разные балансы - это разные типы объектов, а не просто много одинаковых (грубый пример балансы в разных платежных системах, или балансы в разных валютах, против несколько кошельков с одной и той же валютой), особенно если справочник типов будет меняться редко (кстати не такая уж это и проблема), то первый подход - оправдан.
Первый подход сильно сложнее, так как подразумевает механизмы генерации sql запросов на основе действий из пользовательского интерфейса, когда как второй позволяет фиксировать структуру запросов (это упрощает отладку, минимизирует количество ошибок). Кстати первый подход даст меньше нагрузку на базу данных, но мне кажется незначительную, ведь вместо работы с двумя таблицами и набором индексов, будет использоваться одна, так как при работе еще до запроса известно, в какой колонке будет искомый баланс.