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

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

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

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

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

проблемы две:
1. набор операций может меняться
2. каждый вид операции имеет свой набор полей
по сему я храню все в 2-х таблицах по EAV в одной все операции (только тип номер и дата) во 2-ой поля (здесь возможны варианты: все в одном поле через разделитель или на каждое поле одна строка - зависит от объемов)
...
Рейтинг: 0 / 0
создать для "оплати" отдельную таблицу, или
    #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
создать для "оплати" отдельную таблицу, или
    #33683096
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не там выигрыш ищите. Подумайте, как вместо двух проходов сделать один.
...
Рейтинг: 0 / 0
создать для "оплати" отдельную таблицу, или
    #33683195
№ 554 567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О! дай вам бог здоровья. Как раз об этом я послал вопрос в форум Access.
...
Рейтинг: 0 / 0
создать для "оплати" отдельную таблицу, или
    #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
создать для "оплати" отдельную таблицу, или
    #33685368
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже.
...
Рейтинг: 0 / 0
создать для "оплати" отдельную таблицу, или
    #33691823
№ 554 567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Очень содержательный ответ.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / создать для "оплати" отдельную таблицу, или
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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