Я обновляю систему управления платежами, созданную мной некоторое время назад. В настоящее время она имеет одну таблицу для каждого типа оплаты, которую она может принять. Он ограничен только тем, что он может заплатить за одну вещь, которую это обновление должно облегчить. Я просил предложения относительно того, как я должен его проектировать, и у меня есть эти основные идеи для работы от:
- Для каждого типа оплаты укажите одну таблицу с несколькими общими столбцами. (текущий проект)
- Координация всех платежей с центральной таблицей, которая принимает общие столбцы (объединение идентификаторов платежей независимо от типа) и идентифицирует другую таблицу и идентификатор строки, в которой есть столбцы, специализированные для этого типа оплаты.
- У вас есть одна таблица для всех типов платежей и нулевые столбцы, которые не используются для данного типа.
- Используйте идею центральной таблицы, но сохраните специализированные столбцы в таблице ключей/значений.
Мои цели для этого: не смехотворно медленные, самодокументирующиеся как можно больше и максимальная гибкость при сохранении других целей.
Мне не очень нравится 1 из-за повторяющихся столбцов в каждой таблице. Он отражает классы типа оплаты, наследующие базовый класс, который обеспечивает функциональность для всех типов платежей... ORM в обратном направлении?
Я склоняюсь к 2 наиболее, потому что это так же, как "безопасный тип" и самодокументирующийся как текущий дизайн. Но, как и в случае с 1, чтобы добавить новый тип оплаты, мне нужно добавить новую таблицу.
Мне не нравится 3 из-за его "потерянного пространства", и он не сразу определяет, какие столбцы используются для каких типов платежей. Документация может немного облегчить эту боль, но внутренние инструменты моей компании не имеют эффективного метода для хранения/поиска технической документации.
Аргумент, который я дал для 4, заключался в том, что он облегчил бы необходимость изменения базы данных при добавлении нового метода оплаты, но он страдает еще хуже, чем 3, из-за отсутствия ясности. В настоящее время изменение базы данных не является проблемой, но это может стать логическим кошмаром, если мы решили начать предлагать клиентам хранить свою собственную базу данных в будущем.
Итак, конечно, у меня есть свои предубеждения. У кого-нибудь есть лучшие идеи? Какой дизайн, по вашему мнению, подходит лучше всего? На каких критериях я должен основывать свое решение?