Разработка схемы для обработки нескольких платежных шлюзов


9

Это больше вопрос, который требует обратной связи. Я разрабатываю базу данных, которая обрабатывает несколько платежных шлюзов. Платежному шлюзу в основном требуется таблица для деталей заказа до совершения платежа (это является общим для всех PG) и таблица для деталей транзакции для хранения ответа после совершения платежа.

Теперь для обработки нескольких платежных шлюзов я могу либо сохранить одну таблицу транзакций, заполнив ее всеми полями, доступными для всех платежных шлюзов, и полем, в котором указано, из какого PG эта строка;
Или я могу создать отдельные таблицы транзакций для каждого PG с префиксом вроде paypal_или bank_т. Д., Каждое из которых имеет поля, необходимые для каждого из них.

Я просто не уверен, что является наиболее оптимальным способом сделать это. Также необходимо изучить его для подобных сценариев, с которыми я могу столкнуться в будущем.


Это зависит от вашей конкретной ситуации. Как правило, дешевле выбирать подмножества одной большой таблицы, чем объединять множество маленьких таблиц вместе с UNION. Но бывают ситуации, когда дизайн крошечных таблиц работает лучше.
Уолтер Митти

Что у тебя до сих пор?
Аарон

@ BryceAtNetwork23 На данный момент я работаю с двумя PG, и у меня есть отдельные таблицы для них обоих. Но я должен добавить больше PG в будущем. Так что подумал, стоит ли мне продолжать это делать, так как я должен продолжать добавлять больше таблиц каждый раз. Выбор между увеличением количества таблиц и одной таблицы с увеличением количества столбцов и записей. Я немного смущен.
Бибхас

@ Bibhas, можно ли поделиться с нами решением, которое вы использовали? У меня такое же сомнение.
Марсио Мацукато

@MarcioSimao мы использовали одну таблицу со свойствами, подобными paypal_transaction_idи bank_transaction_idт. Д. У нас не было слишком много платежных шлюзов, поэтому у нас это работало. Может не работать с теми, кто поддерживает много PG.
Бибхас

Ответы:


7

Это зависит от того, насколько различаются данные между типами платежей.

Для сайтов, которые я поддерживаю на работе, у нас есть одна таблица, в которой хранятся данные для всех типов платежей. Это работает для нас, потому что наши виды оплаты в основном 4 вида кредитных карт и заказ на покупку компании. Большинство наших клиентов расплачиваются кредитными картами, поэтому в данных нет больших отклонений. Конечно, запросы для тех клиентов кредитных карт всегда дают значения NULL в поле PONumber. Аналогично, запросы для клиентов ПО дают значения NULL во всех полях, связанных с кредитной картой.

Если в ваших данных много разных полей, вы можете попробовать одну основную таблицу транзакций с отдельными таблицами для каждого платежного шлюза. Каждая таблица типов платежного шлюза будет иметь внешний ключ Transaction_id, который будет ссылаться на основную таблицу транзакций.

С другой стороны, если все типы ваших платежных шлюзов имеют одинаковые поля, я бы придерживался одной таблицы транзакций.


1
Спасибо за разъяснение этого. Я думаю, это было прямо передо мной, но просто нужно было, чтобы кто-то указал на это. :)
Бибхас

@ BryceAtNetwork23, если у меня много шлюзов, например 5 или более, как вы думаете, у меня будут трудности с получением данных? Я спрашиваю об этом, потому что я думаю, что главной таблице транзакций придется делать много левых соединений в каждом типе шлюза оплаты.
Марсио Маццукато,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.