PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
pantela
Отправлено: 01 Июля, 2017 - 19:58:50
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 720
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Всем прив.
Я не первый наверное кто подобный вопрос поднимает, но всё же... Стоит задача в проекте сделать баланс пользователей.
Сразу подчеркну что надо создать 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 ;


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

спс.Ув.
 
 Top
caballero
Отправлено: 02 Июля, 2017 - 14:53:16
Post Id


Активный участник


Покинул форум
Сообщений всего: 5988
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




деньги лучше хранить в INT ,в копейках умножив на 100

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


-----
Open Source учетная система http://zippy[dot]com[dot]ua/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB