Периодические реквизиты

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Gust
Сообщения: 15
Зарегистрирован: 22 сен 2005, 00:13

Периодические реквизиты

Сообщение Gust » 03 апр 2006, 11:43

Подскажите как лучше хранить и использовтаь периодические реквизиты. У меня резко падает производительность, когда у справочника имеется несколько таких реквизитов.

Для примера можно рассмотреть реализацию справочника сотрудников с историей должностей и подразделений.

FB 1.5

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 04 апр 2006, 19:26

Подробные примеры - это ты много хочешь. Идеология:

Справочник последних (действующих) поколений записей
ID сущности (ПК)
ID последнего её поколения
атрибуты


Справочник-архив
ID сущности (ФК на справочник действующих поколений)
ID поколения записи (ПК)
дата начала действия
атрибуты


Документы
ID док-та
ID поколения записи (ФК на справочник-архив)

при чтении документа простой прямой джойн на нужное поколение записи справочника чтобы вынуть атрибуты. При составлении нового - выбор из справочника действующих поколений ID последнего поколения. При регистрации документа задним числом - поиск нужного поколения в справочнике-архиве по дате док-та. При фильтрах-группировках по экземплярам сущности - приджойнивание справочника-архива по ID поколения и наложение условий на ID сущности. Возможна вариация отказа от справочника последних поколений вообще и выбор актуальных по макс ID поколения или макс дате начала действия прямо из справочника-архива. Когда 99% процентов документов делаются задним числом (бухгалтерия) вполне оправданно.

Gust
Сообщения: 15
Зарегистрирован: 22 сен 2005, 00:13

Сообщение Gust » 05 апр 2006, 14:47

Вышеописанное случайно не относиться к «внедрению ООП в РСУБД»? Я, пока, такие вещи не практикую.

Изначально выбирал актуальные данные по «макс дате», за исключением того, что каждый периодический показатель хранится у меня в отдельной таблице, что связано с небольшим количеством таких реквизитов. Таблицы указывал в «FROM», а связь в «WHERE». Проблемы, как я писал, возникли, когда у справочников стало появляться несколько таких показателей.
Сейчас выборку периодических реквизитов делаю по типу
SELECT…. , (SELECT ПОКАЗАТЕЛЬ
FROM ТАБЛИЦА_ИСТОРИИ_ПОКАЗАТЕЛЯ
WHERE УСЛОВИЯ_ОТБОРА)
…………………….

В принципе, на скорость отбора данных это особо не повлияло. Минусом является то, что запросы становятся несколько «дремучими», однако, использование представлений снимает эту проблему.

Вообщем, на данный момент исходя из сложности задач, которые мне приходится решать меня все устраивает, но на будущее хотелось бы знать специфические моменты автоматизации бухгалтерии (можно очень кратко, просто чтобы знать какие вопросы могут вызвать трудности при первом пректировании).

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 05 апр 2006, 14:55

Вышеописанное относится всего лишь к лёгкому раскидыванию мозгами на тему "как уйти от вложенных подзапросов и заменить их быстродействующими джойнами путём проектирования структуры хранения данных"...

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 05 апр 2006, 15:30

А в чем глубокий смысл "справочника-архива"? Не захламлять таблицу атрибутов? Без него же все проще: каждому атрибуту - период действия (для текущих указать конец где-нибудь году в 3000-м) и в каждый джоин - "вилку" BETWEEN. Хоть по CURRENT_DATE хоть по дате документа.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 05 апр 2006, 16:47

Если

а) не требуется спошная визуализация актуальных состояний в грид-виде
б) большинство документов оформляется задним числом (а по жизни с бюстгальтерией например так и есть, хоть на день, но не в момент реального факта операции)

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 05 апр 2006, 19:13

У меня возникли смутные сомненья - а не о разных ли мы вещах говорим. Вы, господа, не об отслеживании ли истории каждого атрибута записи в справочнике по отдельности? Имхо это ересь и самомозгоимение. Изменился любой атрибут - появилось новое поколение записи как таковой. В том числе и когда атрибут - ссылка на другой справочник. Диски от этого не переломятся.

Gust
Сообщения: 15
Зарегистрирован: 22 сен 2005, 00:13

Сообщение Gust » 06 апр 2006, 00:03

Идея с быстрыми join-ами очень привлекательна, однако, насколько я понимаю она хорошо работает в случаях, когда только документы вводяться задним числом. А что делать если задним числом оформляется сам периодический показатель?

Пара обычных примеров из области сельского хозяйства:

Цена списания топлива на период, как правило, определяется в конце самого периода (специфика бухгалтерии). Тоже самое с определением плотности топлива (используется для перевода из кг в л и наооборот).

Недавно в одном из крупных хозяйств персонал, работающий с программой чисто случайно обнаружил, что некоторое время назад (от 2 до 4 недель) добрая часть техники одной бригады, перешла в другую бригаду... Их просто забыли (или не захотели) об этом оповестить.

Я, конечно, может еще не до конца понял вашу идею, но перспектива эпизодического обновления внешних ключей документов мне кажеться бОльшим "самомоз..." (честное слово, сумел это прочитать далеко не с первого раза), чем использование подзапросов.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 06 апр 2006, 14:25

Gust писал(а): Цена списания топлива на период, как правило, определяется в конце самого периода (специфика бухгалтерии).
Топлива чи не топлива - пофиг вообще-то. Только списание-то выполняется после определения себестоимости по любому. Иначе это специфика уже не бухгалтерии ;)
Gust писал(а): Тоже самое с определением плотности топлива (используется для перевода из кг в л и наооборот).
Эт не для моего хилого умишка :)
Gust писал(а): Недавно в одном из крупных хозяйств персонал, работающий с программой чисто случайно обнаружил, что некоторое время назад (от 2 до 4 недель) добрая часть техники одной бригады, перешла в другую бригаду... Их просто забыли (или не захотели) об этом оповестить.
И что, пришлось бы проапдейтить туеву хучу ключей? В тыще докУментов ссылка именно на состав техники бригады?
Gust писал(а): Я, конечно, может еще не до конца понял вашу идею, но перспектива эпизодического обновления внешних ключей документов мне кажеться бОльшим "самомоз..." (честное слово, сумел это прочитать далеко не с первого раза), чем использование подзапросов.
Не нравиццо - не ешь. На прощание - при проектировании люди искушённые учитывают основные режимы работы с данными. Если частота чтения одной и той же записи в десятки раз превосходит частоту обновления, то структурой оптимизируют чтение, даже в ущерб записи. И наоборот. И даже более того, оптимизируют типовые запросы, даже если для этого приходится жертвовать производительностью некоторых, выполняющихся раз в год по обещанию. Конкретные решения принимает конкретный разработчик для конкретной системы.

Gust
Сообщения: 15
Зарегистрирован: 22 сен 2005, 00:13

Сообщение Gust » 07 апр 2006, 13:24

Merlin писал(а):Топлива чи не топлива - пофиг вообще-то. Только списание-то выполняется после определения себестоимости по любому. Иначе это специфика уже не бухгалтерии ;)
Себестоимость производимой продукции никоем образом не влияет на цену списания расходных материалов..
Merlin писал(а):И что, пришлось бы проапдейтить туеву хучу ключей? В тыще докУментов ссылка именно на состав техники бригады?
Исходя из того что работа техники, как средства производства, отражается ежедневно в первичной документации именно это и пришлось бы делать.
Merlin писал(а):Не нравиццо - не ешь.
Ни в коем случае не хочу обижать, но выражения подобные "Хоца куцать кариешки" или "Афтар цука" с возрастом проходят у всех без
исключения.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 апр 2006, 13:53

Ни в коем случае не хочу обижать, но выражения подобные "Хоца куцать кариешки" или "Афтар цука" с возрастом проходят у всех без
исключения.
уж тебе то до его возраста и опыта явно еще расти и расти. Без шуток. Merlin у нас самый, гм, "в возрасте" пользователь Firebird. И мне, 40-летнему, до него еще далеко, а такого опыта в прикладных системах я уже не получу (ибо ими занимаюсь только "снаружи").
На выражения не обращай внимания - это "для колеру". Ты лучше еще раз почитай этот топик, и внимай.
Исходя из того что работа техники, как средства производства, отражается ежедневно в первичной документации именно это и пришлось бы делать.
ты, видать, недопонял. Есть бригада. есть техника. Техника в бригаде (состав бригады) - это, как бы, доп. связь, которая не может участвовать в "первичных документах". Если надо отслеживать историю состава бригады - значит, это надо делать. Но опять же, состав меняется редко, и об изменении массы FK здесь тоже речь не идет, если я правильно понял ситуацию.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 07 апр 2006, 14:07

Gust писал(а):
Merlin писал(а):Топлива чи не топлива - пофиг вообще-то. Только списание-то выполняется после определения себестоимости по любому. Иначе это специфика уже не бухгалтерии ;)
Себестоимость производимой продукции никоем образом не влияет на цену списания расходных материалов..
Так, для общего развития: цена списания чего-либо равняется себестоимости объёма этого чего-либо на начало периода плюс себестоимость объёма поступлений всё того же чего-либо в течение периода, поделённым на объём начало периода плюс объём поступлений. Это по среднему. По FIFO похитрее, канешна, LIFO запрещён. Откуда тут всплыла производимая продукция - опять же не для моего хилого умишка. Впрочем, я вижу - ты пришёл учить нас, желторотиков. Пасиба, гуру, мине не нана...

Gust
Сообщения: 15
Зарегистрирован: 22 сен 2005, 00:13

Сообщение Gust » 08 апр 2006, 11:40

Merlin писал(а): Так, для общего развития
Себестоимость – денежное выражение текущих затрат предприятия на производство и реализацию продукции.
Цена - денежное выражение стоимости товара.
«Себестоимость» – одна из составных частей «цены».
Термин «себестоимость» относительно товара «топливо» имеет смысл рассматривать только с точки зрения нефтяных компаний, поскольку топливо – это производимая ими продукция. Для всех остальных предприятий топливо – расходный материал. В случае производства, затраты на топливо идут в себестоимость производимой продукции.
Производимая продукция сельского хозяйства – зерно, мясо, молоко…

Для методов списания FIFO, LIFO и «по среднему» за основу берется ЦЕНА, по которой предприятие закупает расходные материалы. «Хитрость» методов FIFO и LIFO заключается в том, что при условии постоянного роста цен, метод FIFO позволяет снизить себестоимость продукции, увеличить прибыль и налоги предприятия, метод LIFO – наоборот. Грамотные экономисты способны извлечь выгоду от использования каждого из рассмотренных методов в зависимости от внутренней и внешней среды предприятия.

На роль «учителя-гуру» ни в коем случае не претендую. Каждый разработчик для себя решает сам насколько хорошо ему надо знать область, в которой он работает.

Slava Ekimov
Сообщения: 44
Зарегистрирован: 26 окт 2004, 14:30

Сообщение Slava Ekimov » 10 апр 2006, 14:54

Gust писал(а):Каждый разработчик для себя решает сам насколько хорошо ему надо знать область, в которой он работает.
Вот так-то вот Дед, тебе, учись, блин, не знаешь ни хрена, а то только учит всех. :D

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 10 апр 2006, 15:13

И не говори... Оказывается, все годами всё покупают по одним и тем же ценам, а я всё поезда под откос пускаю ;)

Gust
Сообщения: 15
Зарегистрирован: 22 сен 2005, 00:13

Сообщение Gust » 11 апр 2006, 00:36

А почему нельзя аргументированно описать в чем я не прав? Можно с сылками на экономическую литературу.

Ответить