Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> БД - состояние "Счета", Как организовать подобную БД (MS SQL 200 
:(
    Опции темы
Pankon
  Дата 13.10.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: нет
Всего: 5



Есть Юзеры на счет которых приходят условные пункты, после определенных действий юзера;
Юзеры могут свои пункты тратить, на определенные вещи;
Каждый Юзер может смотреть свое состояние "Счета" и свои приходы(и по какому поводу), расходы(и по какому поводу)...
"Хозяин базы" может смотреть всевозможные отчеты и статистики...

Порассуждав немного и прикинув - сколько будет записей, можно сделать вывод, что состояние счета Юзера простым суммированием в таблице приходы и отниманием суммы из таблицы расходы, будет очень "накладно(время)" для БД...


Kак это делается в подобных случаях(например банковские счета, кредитные карточки и. т.д.)?
PM MAIL   Вверх
mr.DUDA
Дата 13.10.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Проще всего поставить триггер на insert, update и delete для таблицы с приходами-расходами; этот триггер выполнит суммирование денег на счёту и обновит таблицу с суммами (это отдельная таблица). Так мы добъёмся того, что вычисления будут выполняться только тогда, когда что-то действительно меняется, и автоматически.


--------------------
user posted image
PM MAIL WWW   Вверх
Pankon
Дата 17.10.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: нет
Всего: 5



Цитата(mr.DUDA @  13.10.2006,  13:27 Найти цитируемый пост)
для таблицы с приходами-расходами
 это одна таблица? Я хотел две сделать: одна для приходов, другая для расходов...

PM MAIL   Вверх
mr.DUDA
Дата 17.10.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Pankon, количество таблиц принципиального значения не играет. Если таблиц две, просто будет два одинаковых триггера. Например, имеем структуру БД как на приаттаченном скриншоте. Тогда для создания триггера для таблицы Prihods надо выполнить такой SQL:

Код
CREATE TRIGGER [Prihods_Changed]
   ON  [dbo].[Prihods]
   AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
    DECLARE @prihodSum real
    DECLARE @rashodSum real
    DECLARE @accountId int

    SELECT @accountId = (SELECT TOP 1 AccountID from Inserted)
    IF @accountId IS null
        SELECT @accountId = (SELECT TOP 1 AccountID from Deleted)

    SELECT @prihodSum = (
        SELECT SUM([Prihods].[Value]) FROM [Prihods]
        WHERE [Prihods].[AccountID] = @accountId)
    
    SELECT @rashodSum = (
        SELECT SUM([Rashods].[Value]) FROM [Rashods]
        WHERE [Rashods].[AccountID] = @accountId)

    UPDATE [Accounts] 
    SET [Value] = @prihodSum - @rashodSum
    WHERE [AccountID] = @accountId
    
END


Для таблицы Rashods всё будет то же самое, кроме первых двух строчек:
Код
CREATE TRIGGER [Rashods_Changed]
   ON  [dbo].[Rashods]


Добавлено @ 12:58 
З.Ы. ещё есть такая штука как Computed columns (по крайней мере в 2005-м точно есть, в 2000-м не помню), вроде можно сделать вычисляемую колонку обновляемую автоматически.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  db_shot1.JPG 16,18 Kb


--------------------
user posted image
PM MAIL WWW   Вверх
Pankon
Дата 19.10.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: нет
Всего: 5



mr.DUDA, спасибо за помощь


Цитата(mr.DUDA @  17.10.2006,  12:56 Найти цитируемый пост)
Computed columns (по крайней мере в 2005-м точно есть,
 база как раз на 2005... Computed columns - с чем это едят? (т.е. где это искать, и как с этим работать, в двух словах, если можно)(2005 еще в глаза не видел smile)

PM MAIL   Вверх
mr.DUDA
Дата 19.10.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(Pankon @  19.10.2006,  11:29 Найти цитируемый пост)
 база как раз на 2005... Computed columns - с чем это едят? (т.е. где это искать, и как с этим работать, в двух словах, если можно)(2005 еще в глаза не видел )

Это есть в SQL Server books online, я с этим не работал но пару раз натыкался - это что-то вроде полей, которые хранятся в БД, но автовычисляются. По ним индексы строить можно и т.п.

ИМХО, для твоей задачи моих триггеров достаточно smile


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.