Это частично зависит от используемой платформы (если таковая имеется). Например: способ Ruby on Rails обычно заключается в том, чтобы хранить тип платежа в таблице платежей и затем иметь разные отдельные таблицы для каждого типа платежа (PayPal, Кредитная карта и т. Д.).
В качестве альтернативы, если вы заметите, что вы повторяете одни и те же данные во многих таблицах, в Rails есть способ сохранить все данные в одной и той же таблице, используя только те поля, которые вам нужны, но все же позволяя вам иметь отдельные объекты. Например, у вас будет объект AbstractPayment с таблицей abstract_payments, но у вас также будут объекты PayPalPayment и CreditCardPayment, которые оба наследуют от AbstractPayment и используют таблицу abstract_payments. Все, что вам нужно для определения типа платежа, - это столбец в abstract_payments, который сообщает вам, какой это тип (вероятно, строка, но может быть целым числом, если вы того пожелаете). Это называется STI .
Независимо от того, какую платформу / язык вы используете, однозначно могут применяться одни и те же идеи, и я думаю, что правильное решение будет зависеть от того, сколько различных типов платежей вы используете, по сравнению с тем, насколько простой вы хотите, чтобы ваша база данных была.