(MySQL) Подскажите более простую архитектуру таблиц.
От: MasterMind Россия  
Дата: 13.07.15 12:10
Оценка:
Задача:

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

Собственно, как наиболее проше это можно реализовать архитектурно на таблицах MySQL, чтобы можно было в итоге потом отслеживать изменения балансов.
Re: (MySQL) Подскажите более простую архитектуру таблиц.
От: DeathKnight Беларусь  
Дата: 13.07.15 12:59
Оценка: 2 (1)
Здравствуйте, MasterMind, Вы писали:

MM>Задача:


MM>1. Есть клиент которому на некий баланс кладутся деньги, а периодически могут и обратно сниматься.

MM>2. Этот клиентский баланс должен периодически по оказываемых услугам уменьшаться до нулевого.

MM>Собственно, как наиболее проше это можно реализовать архитектурно на таблицах MySQL, чтобы можно было в итоге потом отслеживать изменения балансов.




мало деталей бизнеса. если нужен только баланс — то чуть ли не в таблице счетов его можно хранить.
если нужна детализация по операциям — то операции — отдельная таблица, а оперативный баланс — или уже в клиентском коде считать, или view, или в еще одну таблицу записывать (самодельное materialized view).
Re: (MySQL) Подскажите более простую архитектуру таблиц.
От: merlin88  
Дата: 13.07.15 20:15
Оценка: 2 (1)
Здравствуйте, MasterMind, Вы писали:

MM>Задача:


MM>1. Есть клиент которому на некий баланс кладутся деньги, а периодически могут и обратно сниматься.

MM>2. Этот клиентский баланс должен периодически по оказываемых услугам уменьшаться до нулевого.

MM>Собственно, как наиболее проше это можно реализовать архитектурно на таблицах MySQL, чтобы можно было в итоге потом отслеживать изменения балансов.


Вы можете вести две отдельные таблицы. Одна таблица хранит кредиты (Credit), вторая долги клиента (Debt). В этом случае текущий баланс клиента, есть сумма актуальных значений по данным таблицам. В этих таблицах могут быть ссылки на операционные таблицы, к примеру платежей (Payments) и оказанных услуг (Charges), чтобы можно было понять из чего собственно складывается кредит или дебет.
Re: (MySQL) Подскажите более простую архитектуру таблиц.
От: wildwind Россия  
Дата: 14.07.15 09:45
Оценка:
Здравствуйте, MasterMind, Вы писали:

Какие ожидаются объемы и какая нагрузка?
avalon/1.0.442
Re: (MySQL) Подскажите более простую архитектуру таблиц.
От: MasterZiv СССР  
Дата: 14.07.15 11:57
Оценка:
Здравствуйте, MasterMind, Вы писали:

MM>1. Есть клиент которому на некий баланс кладутся деньги, а периодически могут и обратно сниматься.

MM>2. Этот клиентский баланс должен периодически по оказываемых услугам уменьшаться до нулевого.

MM>Собственно, как наиболее проше это можно реализовать архитектурно на таблицах MySQL, чтобы можно было в итоге потом отслеживать изменения балансов.



Счёт и проводки по счёту (приход/расход).
Re[2]: (MySQL) Подскажите более простую архитектуру таблиц.
От: MasterMind Россия  
Дата: 14.07.15 12:11
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, MasterMind, Вы писали:


W>Какие ожидаются объемы и какая нагрузка?



Минимальная, в районе 100 клиентов.
Re[2]: (MySQL) Подскажите более простую архитектуру таблиц.
От: MasterMind Россия  
Дата: 14.07.15 16:51
Оценка:
Здравствуйте, merlin88, Вы писали:

M>Здравствуйте, MasterMind, Вы писали:


MM>>Задача:


MM>>1. Есть клиент которому на некий баланс кладутся деньги, а периодически могут и обратно сниматься.

MM>>2. Этот клиентский баланс должен периодически по оказываемых услугам уменьшаться до нулевого.

MM>>Собственно, как наиболее проше это можно реализовать архитектурно на таблицах MySQL, чтобы можно было в итоге потом отслеживать изменения балансов.


M>Вы можете вести две отдельные таблицы. Одна таблица хранит кредиты (Credit), вторая долги клиента (Debt). В этом случае текущий баланс клиента, есть сумма актуальных значений по данным таблицам. В этих таблицах могут быть ссылки на операционные таблицы, к примеру платежей (Payments) и оказанных услуг (Charges), чтобы можно было понять из чего собственно складывается кредит или дебет.




А если, например, одна таблика по ткушему балансу клиента

1. client_balance
client_id
balance (меняется при внесении или выводе)

И история

2. client_balance_history
client_id
amount суииа денег
type_id (тип операции — внесение или вывод)


Но есть доп условие — период в течении которого можно вносить и выводить из балансе клиента.

Вот допустим будет

client_period
id — юник
start datetime
stop datetime
flag — (1 — завершен, 0 — в работе)

Если период завершается по дате, закрыт, открыть новый период и ввести на баланс клиента.

Вот в таком ввиде, что может быть проблемой в итоге? Нужно ли в таблице client_balance_history дополнительно в колонка хранить баланс, до после суммы amount, в таблице client_balance — он должен сменться автоматически сразу.
Re[3]: (MySQL) Подскажите более простую архитектуру таблиц.
От: wildwind Россия  
Дата: 14.07.15 17:41
Оценка: 2 (1)
Здравствуйте, MasterMind, Вы писали:

MM> W>Какие ожидаются объемы и какая нагрузка?


MM> Минимальная, в районе 100 клиентов.


Нагрузка измеряется не в количестве клиентов. А в количестве одновременно работающих и количестве транзакций в секунду.
avalon/1.0.442
Re[4]: (MySQL) Подскажите более простую архитектуру таблиц.
От: MasterMind Россия  
Дата: 14.07.15 19:24
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, MasterMind, Вы писали:


MM>> W>Какие ожидаются объемы и какая нагрузка?


MM>> Минимальная, в районе 100 клиентов.


W>Нагрузка измеряется не в количестве клиентов. А в количестве одновременно работающих и количестве транзакций в секунду.



Транзакций нет как таковых в условии задачи. Просто табличка на 100 клиентов.
Re[3]: (MySQL) Подскажите более простую архитектуру таблиц.
От: merlin88  
Дата: 15.07.15 15:18
Оценка:
Здравствуйте, MasterMind, Вы писали:

MM>Вот в таком ввиде, что может быть проблемой в итоге? Нужно ли в таблице client_balance_history дополнительно в колонка хранить баланс, до после суммы amount, в таблице client_balance — он должен сменться автоматически сразу.


Это ИМХО скорее не проблема, а вопрос избыточности данных. Конечно можно при желании задублировать сумму баланса в client_balance_history.
Здесь надо скорее руководствоваться именно соображениями нагрузки на бд. Иногда проще допустить избыточность и таким образом упростить ряд запросов.
Вы попробуйте представить в какой форме понадобиться выводить эти данные на формах, в отчетах и т.д. и решение придет само собой.
Иногда уже в стадии разработки понимаешь, что структура данных не айс и вносишь изменения в схему.

P.S. Могу порекомендовать ознакомиться с понятием "Нормализация баз данных", необходимо при проектировании реляционных БД. Тогда вы сможете посмотреть на создаваемую структуру несколько иными глазами =)
Отредактировано 15.07.2015 15:37 merlin88 . Предыдущая версия .
Re[4]: (MySQL) Подскажите более простую архитектуру таблиц.
От: MasterMind Россия  
Дата: 15.07.15 15:39
Оценка:
Здравствуйте, merlin88, Вы писали:

M>Здравствуйте, MasterMind, Вы писали:


MM>>Вот в таком ввиде, что может быть проблемой в итоге? Нужно ли в таблице client_balance_history дополнительно в колонка хранить баланс, до после суммы amount, в таблице client_balance — он должен сменться автоматически сразу.


M>Это ИМХО скорее не проблема, а вопрос избыточности данных. Конечно можно при желании задублировать сумму баланса в client_balance_history.

M>Здесь надо скорее руководствоваться именно соображениями нагрузки на бд. Иногда проще допустить избыточность и таким образом упростить ряд запросов.
M>Вы попробуйте представить в какой форме понадобиться выводить эти данные на формах, в отчетах и т.д. и решение придет само собой.
M>Иногда уже в стадии разработки понимаешь, что структура данных не айс и вносишь изменения в схему.

M>P.S. Могу порекомендовать ознакомиться с понятием "Нормализация баз данных", необходимо при проектировании реляционных БД. Тогда вы сможете посмотреть на создаваемую структуру несколько иными глазами =)



Про виды нормализации и денормализацию в средствии оптимизации (объединениям, покрывающим индексам) я знаю. Мне нужно просто быстро накидать решение, с минимальными трудозатрами по времени.
Re[5]: (MySQL) Подскажите более простую архитектуру таблиц.
От: merlin88  
Дата: 15.07.15 16:44
Оценка:
Здравствуйте, MasterMind, Вы писали:

MM>Про виды нормализации и денормализацию в средствии оптимизации (объединениям, покрывающим индексам) я знаю. Мне нужно просто быстро накидать решение, с минимальными трудозатрами по времени.


Не хотел обидеть, извините. Можете немного более подробно описать проблему про то доп условие, с которого все началось?
Re[5]: (MySQL) Подскажите более простую архитектуру таблиц.
От: wildwind Россия  
Дата: 15.07.15 18:13
Оценка: 3 (1)
Здравствуйте, MasterMind, Вы писали:

MM> Транзакций нет как таковых в условии задачи. Просто табличка на 100 клиентов.


Я, если что, имел в виду бизнес транзакции, а не транзакции БД. Может, ты неверно понял. В данном случае это операции со счетом: пополнение счета, списание средств со счета, перевод с одного счета на другой.

В общем, если вопрос нагрузки и масштабируемости не волнует, то сгодится любая структура. Например две таблицы: таблица текущих балансов и таблица операций (дата, счет, сумма(+/-), вид операции).
avalon/1.0.442
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.