Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Таблицы для баланса пользователя, транзакции, заказов

Страниц (1): [1]
 

1. pantela - 01 Июля, 2017 - 19:58:50 - перейти к сообщению
Всем прив.
Я не первый наверное кто подобный вопрос поднимает, но всё же... Стоит задача в проекте сделать баланс пользователей.
Сразу подчеркну что надо создать 2 разных счёта "USD" и "EUR"
Думаю какого вида таблицы создать. Попробую привести прим. той что я думаю.

В таблице пользователя создать 2 поля:
CODE (SQL):
скопировать код в буфер обмена
  1. balance_usd double(15,2)
  2. balance_eur double(15,2)

Думаю для того что бы сумму подсчитывать баланс сразу из одного поля, что бы не пробегать по другой таблицы для суммирования все входящие и исходящие суммы.


Таблица транзакции: Для введение учёта всех транзакции
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `users_transactions` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `user_id` int(11) DEFAULT NULL COMMENT 'Пользователь',
  4.   `datetime` datetime NOT NULL COMMENT 'Дата-Время операции',
  5.   `type` enum('credit','debit') NOT NULL COMMENT 'credit-поступило на счет, debit - снято со счета',
  6.   `currency` enum('usd','eur') NOT NULL COMMENT 'Какая валюта была',
  7.   `method_id` tinyint(1) NOT NULL COMMENT 'Метод',
  8.   `order_id` int(11) DEFAULT NULL COMMENT 'Заказ',
  9.   `amount` double(15,2) NOT NULL COMMENT 'Сумма',
  10.   `comment` text NOT NULL COMMENT 'Комментарий'
  11.   PRIMARY KEY (`id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Вопрос: "order_id" думаю тут держать, т.к. снятие счёта тоже тут буду сохранять


Метод пополнения счёта:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `methods` (
  2.   `method_id` int(11) NOT NULL,
  3.   `status` tinyint(1) NOT NULL,
  4.   `title` varchar(55) COLLATE utf8_unicode_ci NOT NULL
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



Заказы:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `orders` (
  2.   `order_id` int(11) NOT NULL,
  3.   `status` tinyint(1) NOT NULL,
  4.   `summ` double(15,2) NOT NULL COMMENT 'Сумма',
  5.   `sale` double(15,2) NOT NULL COMMENT 'Скидка',
  6.   `comment` text NOT NULL COMMENT 'Комментарий'
  7.   PRIMARY KEY (`order_id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Вопрос: Как тут определятьопределять каике продукты входят в запись? Делять ещё отдельную таблицу и там ввести учёт? напр. order_id = product_id


Продукты:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `products` (
  2.   `product_id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `status` tinyint(1) NOT NULL,
  4.   `title` varchar(55) COLLATE utf8_unicode_ci NOT NULL
  5.   `price` double(15,2) NOT NULL COMMENT 'Сумма',
  6.   `comment` text NOT NULL COMMENT 'Комментарий'
  7.   PRIMARY KEY (`product_id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Что думаете...?

спс.Ув.
2. caballero - 02 Июля, 2017 - 14:53:16 - перейти к сообщению
деньги лучше хранить в INT ,в копейках умножив на 100

во первых БД будет быстрее работать во вторых не будет проблем с округлениями

 

Powered by ExBB FM 1.0 RC1