![]() |
|
Модераторы: LSD |
![]()
|
|
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
Нужен совет по организации БД, для решения задачи следуюшего характера:
Есть Юзеры на счет которых приходят условные пункты, после определенных действий юзера; Юзеры могут свои пункты тратить, на определенные вещи; Каждый Юзер может смотреть свое состояние "Счета" и свои приходы(и по какому поводу), расходы(и по какому поводу)... "Хозяин базы" может смотреть всевозможные отчеты и статистики... Порассуждав немного и прикинув - сколько будет записей, можно сделать вывод, что состояние счета Юзера простым суммированием в таблице приходы и отниманием суммы из таблицы расходы, будет очень "накладно(время)" для БД... Кто знает, как это делается в подобных случаях(например банковские счета, кредитные карточки и. т.д.) |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
В Oracle есть такая штука: материализованное представление (обсуждалось тут).
Вообще неплохо бы указать какой сервер(сервера) предполагается использовать. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
||||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
а завести отдельную таблицу "Состояние счета" нельзя ? и поддерживаеть ее актуальность либо с помощью хранимых процедур, либо (что не очень красиво) триггеров ?
-------------------- --- |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Нельзя. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
почему нельзя, если не секрет ?
-------------------- --- |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Я был не совсем прав, есть некоторые проблемы, но это возможно.
Пусть у нас есть такая сводная таблица. Первая транзакция добавляет запись в таблицу приходов, затем читает из таблицы сводной таблицы текущее значение, прибавляет к нему требуемую величину. В этот момент вторая транзакция добавляет запись в таблицу приходов, затем читает из таблицы сводной таблицы текущее значение (без учета данных первой транзакции), прибавляет к нему требуемую величину. После того как обе транзакции закончатся коммитом, в итоговой таблице будут неверные данные. Единственный выход это блокировка на уровне строк. Но не знаю, как с этим делом в MS SQL Server. И вообще блокировки это зло. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
тоже самое будет и при простом выгребании суммы по строкам из таблицы приходов
если1 транзакция добавила туда запись и не закончилась, а вторая начинает в это время читать sum по таблице приходов,то данные, внесенные первой транзакцией, она также не увидит. -------------------- --- |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Нет не то же самое. Да мы можем не увидеть данных которые добавила другая транзакция, но если мы повторим запрос после коммита транзакции мы увидим изменения (пока они не закомичены они не существенны). В той ситуации, что я описал, неверно подсчитанная сумма так и останется в таблице и ошибка будет накапливаться. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
Я внимательно читаю ваши посты...
Спасибо за рассуждения. Но ввывод для себя я еще не сделал... С нетерпением жду продолжения.. |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |