Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / создать для "оплати" отдельную таблицу, или / 11 сообщений из 11, страница 1 из 1
20.04.2006, 17:42
    #33680221
№ 554 567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
Здравствуйте все!

Имеется таблица History с полями docID, ТоварID, amount, price,...
и таблица Docs с полями docID, ОтКогоID, docdate,...

все операции по продажам и передвижению товара заносятся в History, пока все в нем, а номер документа в Docs. Поступления товара “откого” тоже в Docs.

Наступает момент, когда нужно оплатить товар, поступивший от конкретного поставщика, по отдельно взятому документу. Результат должен быть таким от остатка товара вычесть сколько оплачивается.
Посоветуйте, пожалуйста, каким путем идти? создать специально для оплати отдельную таблицу, или это организовать в той же таблице History.
Спасибо!
...
Рейтинг: 0 / 0
21.04.2006, 10:00
    #33681306
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
все операции - приход, отгрузка, оплаты, перемещение, возврат, усушка, списание и т.д. должны быть разделены, а как хранить - это второй вопрос.
...
Рейтинг: 0 / 0
21.04.2006, 13:24
    #33682404
№ 554 567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
Тогда вопрос, как разделены?
У меня в Docs с полями docID, ОтКогоID, docdate,... сидит поле “операция” в котором хранится код операции.

Вопрос как раз про то, как лучше хранить.
Хранить оплата, возврат, и ему подобные в той же History со знаком “-“ или сделать отдельную таблицу для этого
...
Рейтинг: 0 / 0
21.04.2006, 14:02
    #33682613
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
В той же. Сейчас такая мода.
...
Рейтинг: 0 / 0
21.04.2006, 14:14
    #33682684
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
№ 554 567
Вопрос как раз про то, как лучше хранить.

проблемы две:
1. набор операций может меняться
2. каждый вид операции имеет свой набор полей
по сему я храню все в 2-х таблицах по EAV в одной все операции (только тип номер и дата) во 2-ой поля (здесь возможны варианты: все в одном поле через разделитель или на каждое поле одна строка - зависит от объемов)
...
Рейтинг: 0 / 0
21.04.2006, 15:24
    #33683025
№ 554 567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
Канешно, подход может быть разный. на данный момент у меня одна таблица History, но взяв в руки пылу смотрю и думаю распилить или нет.

Доп.
первый вариант: все находится в одной таблице
второй вариант: в две таблицы, и допустим, с одинаковыми полями

по-моему, нужный объем для хранения информации одно и тоже(может, и нет).

что касается быстроты, нужен ваш совет:

К примеру, запрос для остатков:
запрос для первого варианта:

выбрать все коды, SUM1-SUM2 из таблицы коды
LEFT JOIN (выбрать SUM(amount) as SUM1 из History где docID находится в
(выбрать все docID из docs где ОБЬЕКТ _ ПОЛУЧАТЕЛЬ =” КРИТЕРИИ ОТБОРА” ) группировать по кодам)
LEFT JOIN (выбрать SUM(amount) as SUM2 из History где docID находится в
(выбрать все docID из docs где ОБЬЕКТ _ ИСТОЧНИК =” КРИТЕРИИ ОТБОРА” ) группировать по кодам)
запрос для первого варианта:
выбрать все коды, SUM1-SUM2 из таблицы коды
LEFT JOIN (выбрать SUM(amount) as SUM1 из History где docID находится в
(выбрать все docID из docs где ОБЬЕКТ _ ПОЛУЧАТЕЛЬ =” КРИТЕРИИ ОТБОРА” ) группировать по кодам)
LEFT JOIN (выбрать SUM(amount) as SUM2 из PAYMENT_History где docID находится в
(выбрать все docID из docs где ОБЬЕКТ _ ИСТОЧНИК =” КРИТЕРИИ ОТБОРА” ) группировать по кодам)
Канешно, очень извиняюсь, но можете ли вы, оценить, который будет из них работать быстрее. Т.Е. одна большая таблица, но выборка из одной таблицы, или две по 50/50, но выборка из двух таблиц. Доп. обе таблицы в одной и той же базе.
Или, кроме этих факторов, в игру вступает еще другие факторы (накладные расходы и т.д.)
...
Рейтинг: 0 / 0
21.04.2006, 15:42
    #33683096
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
Не там выигрыш ищите. Подумайте, как вместо двух проходов сделать один.
...
Рейтинг: 0 / 0
21.04.2006, 16:07
    #33683195
№ 554 567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
О! дай вам бог здоровья. Как раз об этом я послал вопрос в форум Access.
...
Рейтинг: 0 / 0
21.04.2006, 18:19
    #33683646
№ 554 567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
ModelRНе там выигрыш ищите. Подумайте, как вместо двух проходов сделать один.
Вот, что-то сочинил:
Так будет правильно? или это, в сущности, то же самое
SELECT коды, amount FROM коды as Sk LEFT JOIN
(SELECT коды, SUM(IIF(ОБЬЕКТ _ ПОЛУЧАТЕЛЬ =” КРИТЕРИИ “),Кол,0)) - SUM(IIF(ОБЬЕКТ _ ИСТОЧНИК =” КРИТЕРИИ “,Кол,0))
as amount FROM History INNER JOIN docs ON History.docID=docs.docID
WHERE ОБЬЕКТ _ ПОЛУЧАТЕЛЬ =” КРИТЕРИИ “ or (ОБЬЕКТ _ ИСТОЧНИК =” КРИТЕРИИ “ группировать по кодам) as H2
on Sk.коды = H2.коды
...
Рейтинг: 0 / 0
24.04.2006, 09:48
    #33685368
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
Очень похоже.
...
Рейтинг: 0 / 0
26.04.2006, 14:20
    #33691823
№ 554 567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создать для "оплати" отдельную таблицу, или
Спасибо.
Очень содержательный ответ.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / создать для "оплати" отдельную таблицу, или / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]