Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: денежные операции (структура БД)
 
 автор: Дмитрий Смаль   (11.01.2010 в 15:08)   письмо автору
 
 

Здравствуйте!
нужен совет от тех, кто проектировал БД, где у пользователей есть деньги на счету.

задача такая:
- есть две валюты - долар и евро
- у каждого пользователя есть свои деньги соответсвенно
- есть определённые операции когда из счёта пользователя деньги перечисляются на специальные счета сайта (может быть одновременно на несколько)

я счас делаю так:
- в таблице юзеров два поля с остатком на счетах соответсвенно
- таблица со счетами сайта - несколько столбиков с остатками на этих счетах - в таблице всего две строки - по одной на валюту
- таблица с финансовыми операциями, где указывается юзер, сумма и на какие счета сайта перечисляется

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

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

в момент когда надо провести операцию я вношу изсенения в таблицу настроек и отключаю возможность проведения операций - чтобы одновременно только одна операция проводилась - так как перед проведением операции надо сделать выбрку из нескольких таблиц и изменения внести тоже в несколько таблиц
Тип БД myISAM - не позволяет делать несколько запросов одновременно, с другими типами таблиц неработал и сомневаюсь в их целесообразности

после успешного проведения операции снова вношу изменения в таблицу настроек и включаю возможность проводить финансовые операции

Вобщем жду коментариев и советов правильно ли я делаю

  Ответить  
 
 автор: Diplex   (12.01.2010 в 02:12)   письмо автору
 
   для: Дмитрий Смаль   (11.01.2010 в 15:08)
 

я бы также сделал... а при возникновении проблем - переделал бы))

  Ответить  
 
 автор: Trianon   (12.01.2010 в 02:16)   письмо автору
 
   для: Дмитрий Смаль   (11.01.2010 в 15:08)
 

такие вещи обычно в транзакционных БД проводятся.
В MySQL это таблицы на движке InnoDB .

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 03:07)   письмо автору
 
   для: Trianon   (12.01.2010 в 02:16)
 

как экстримальный вариант, можно вначале считать значение 1 изменяемой записи, потом обновить запись, если ошибки нет, обновить вторую запись. Если при обновлении второй записи произошла ошибка, не завершать работу скрипта (как это часто делается типа $sql = mysql_query($query) or die(mysql_error());), а восстановить запись в первой таблице по значениям, сохраненным в памяти и сообщить пользователю все подробности ошибки.
Но я не вижу смысла отказываться от InnoDB. А с ним можно спокойно выполнять полноценные трансакции. myISAM имеет смысл если нужет текстовый поиск с сортировкой по релевентности (функцией WHERE MATCH (text) AGAINST ...). В других случаях myISAM, вроде, никаких преимуществ не имеет.

  Ответить  
 
 автор: Дмитрий Смаль   (14.01.2010 в 18:32)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 03:07)
 

спасибо за советы..
пока не решил окончательно использовать инодб, сделал по простому:
- перед проведением финансовой операции блокирую нужные таблици дабы избежать одновременного изменения записей
- после того, как проводится финансовая операция получаю ид этой операции и его вставляю в счёт пользователя как ид последней операции по этому пользователю

таким образом если будет ошибка то понятно что именно не записало и можно автоматом внести изменения в баланс пользователя

перечитал кучу инфы по майисам и инодб..
основное преимущество майисам то, что он быстрее работает и не так грузит сервер как инодб
пока вижу лиш недостатки в отсутствии транзакций

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования