powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Модель данных по Тенцеру
25 сообщений из 161, страница 2 из 7
Модель данных по Тенцеру
    #33448021
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcAПри чем тут кстати Тенцер? Такая архитектура известна со времен царя Гороха..)
Тенцер тут при том что реализовал такую схему и описал в своей статье.
Говоря "по схеме Тенцера" имеют ввиду схему описанную в статье Анатолия Тенцера.

Прикладная область у него - оптовая торговля медикаментами.
Система автоматизирует не только товарные операции но и всю бухгалтерию.

Я в свое время пытался реализовать такую схему но скис на сложности реализации клиента (делал в виде двухзвенки).
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33448196
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скисать в таких вопросах ну никак нельзя, а то придется работать по части разгрузки медикаментов.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33448450
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Programmer_OrtodoxСкисать в таких вопросах ну никак нельзя, а то придется работать по части разгрузки медикаментов.
Так я только в порядке эксперимента, пошшупать так сказать...
Моя система для книжек сделана, чиста классически ;)
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33448509
eav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eav
Гость
2 UrryMcA]
модели действительно лет 30
принципиальные преимущества:
добавление новых \изменение стр-ры справочников делает (конечный) пользователь
добавление новых \изменение стр-ры документов-операций делает (конечный) пользователь
о других преимуществах (права доступа, интерфейс, контроль целостности и т.д.) уже говорили
недостаток - большое число записей в таблицах и как следствие большой объем индексов - лечится памятью сервера
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33448715
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcA wrote:
> to locky:
>
> ИМХО представляется очень сомнительной целесообразность использования
> "модели Тенцера" (При чем тут кстати Тенцер? Такая архитектура известна
> со времен царя Гороха..) в Вашем случае.
в моем случае - в каком? первом/втором?
А тенцер тут - токо как общая точка приложения - есть статья, которую
все тут читали. потому и "Модель Тенцера".
В аутглюке кста, где-то тоже поля вот так набираются.

>
> Большинство документов реализующих функционал бухучета/торговли/зарплаты
> и др. вполне свободно ложаться на стандартные "плоские" таблицы.
Да все они ложаться!
Только оборотка по 40 типам документов выглядит в лудшем случае как 40
последовательных union all, и при каждом добавлении документа надо
дописывать массу отчетов. Конечно, можно использовать журналы операций,
но это - прямое дублирование информации.


>
> Они-же не меняют свою структуру каждый день? Раз сформированые они
> работают 1-2 года до очередной переделки (до смены бизнес
> процессов/законодательства).
Нет, не меняют каждый день. Один раз в полгода - уже достаточно.


>
> Единственный плюс - скорость построения схемы хранения таких документов.
> Но это все равно изврат - просто попытка невелировать ущербность RAD
> средствами приложения.
Огромный плюс! Снижается стоимость разработки - растёт зарплата.

>
> По крайней мере несколько раз видел подобное применение аналогичной
> архитектуры - и каждый раз основным мотивом применение ее была как раз
> ущербность среды разработки.
Среда - что? Сиквел? Делфин?

>
> Мне очень интересно - каким RAD Вы пользуетесь и какова платформа
> разработанного Вами приложения. Я честно говоря в тупике - не могу
> понять цимус использования динамически меняющихся классов ВО ВСЕМ
> приложении.
Во первых, не "цимус", а "цимес" - не позорьте нас с Вами.
По сущейству - MS SQL2K+Delphi 7.0+DevExpress.
Классы не динамически меняются.... они единоразово настраиваются. И это
есть плюс.

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33450219
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eav добавление новых \изменение:
1. стр-ры справочников делает (конечный) пользователь
2. стр-ры документов-операций делает (конечный) пользователь


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

ИМХО Бизнес-процессы на предприятиях россии и так находятся в жутком состоянии. А если дать еще и пользователю изменять в оперативном режиме схему документооборота/аналитики - будет совсем "вешалка".

Согласен - в определенных случаях такая схема себя оправдывает. Но в своей практике я такого не встречал.

Я например не могу себе такое представить, что без согласования хотя-бы с CIO/CFO пользователь мог изменить структуру документооборота/аналитику. В моем случае это неизбежно вызовет убытков на пару лимонов в месяц. (В худшем случае пишется служебная записка, а лучше - аналитик пишет документ с анализом возможных "косяков".)

lockyКонечно, можно использовать журналы операций, но это - прямое дублирование информации.


?? Т.е. у Вас аналитические/синтетические отчеты строются по документам(по записям первичной информации)???

ИМХО - возможное решение, но не оптимальное в некоторых случаях. Встречал в своей практике и считаю такой вариант неприемлемым.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33450348
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcAКак уже где-то здесь говорилось - свобода изменения структуры приложения пользователем почти всегда приводит к хаосу в учетной системе.

ИМХО Бизнес-процессы на предприятиях россии и так находятся в жутком состоянии. А если дать еще и пользователю изменять в оперативном режиме схему документооборота/аналитики - будет совсем "вешалка".

Согласен - в определенных случаях такая схема себя оправдывает. Но в своей практике я такого не встречал.

Я например не могу себе такое представить, что без согласования хотя-бы с CIO/CFO пользователь мог изменить структуру документооборота/аналитику. В моем случае это неизбежно вызовет убытков на пару лимонов в месяц. (В худшем случае пишется служебная записка, а лучше - аналитик пишет документ с анализом возможных "косяков".)
Пользователь здесь в смысле "не программист". Как это в реальности происходит - с согласованием с CIO/CFO, без него, со служебной запиской/без - это их личные сексуальные проблемы. Главное чтобы это можно было делать без участия разработчика, возможно специально обученным администратором такой системы.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33450508
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я таки понял в каких случаях схема "по Тенцеру" себя оправдывает -

1. Система должна просто "фиксить" результаты хоз деятельности предприятия. "Главное - учет" - доктрина такой архитектуры. Функционирование бизнес процессов предприятия поддерживается в основном организационными мерами и не отражено в Системе.

2. Имеется достаточное количество операторов, чтобы вводить данные в систему с постоянно увеличивающимся/изменяющимся количеством справочников/документов.

3. Быстрое построение отчетов не требуется. Схема наиболее оптимальна на предприятии с "посмертным" учетом - например крупные производственные предприятия "советского" типа, которые живут плановыми показателями предыдущего месяца.

4. Основной контингент операторов - достаточно квалифицированы, чтобы правильно заполнять документы/получать отчеты. Они работают на предприятии достаточно долго, чтобы знать ньюансы бизнес процессов.

---

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

Я кажется понял причины возникновения такой архитектуры. С учетом имеющихся ограничений - имеет право на реализацию. Учту на будущее. ;)
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33451356
eav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eav
Гость
2 UrryMcA
Все наоборот
Все нормальные системы учета/анализа построены именно так:
набор документов определяет пользователь
набор аналитик определяет пользователь
проводки по этим документам и аналитикам настраивает пользователь
БП настраивает пользователь
отчеты запрограмированы заранее и строятся только по проводкам
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33451617
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eav набор документов определяет пользователь
набор аналитик определяет пользователь
проводки по этим документам и аналитикам настраивает пользователь
БП настраивает пользователь
отчеты запрограмированы заранее и строятся только по проводкам

"Набор документов" - в смысле количество видов документов используемых конкретным пользователем настраивается без перепрограммирования БД?

"набор аналитик" - в смысле количество и вид параметров документа настраивается без перепрограммирования БД?

"проводки по этим документам и аналитикам" - в смысле содержание проводок формируемых по первичным документам настраивается без перепрограммирования БД?

Если это так - то подобные возможности предоставляют практически все общедоступные учетные системы (которые построены совсем не "по Тенцеру")

В таком случае применение "модели Тенцера" не имеет особых преимуществ при построении учетной системы.

Не готов сейчас подробно обсуждать преимущества/недостатки предложеной архитектуры - это требует времени на дополнительный анализ, которого у меня нет. Хотя с удовольствием почитаю чужие мысли по этому поводу.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33451695
eav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
eav
Гость
UrryMcA
"Набор документов" - в смысле количество видов документов используемых конкретным пользователем настраивается без перепрограммирования БД?
"набор аналитик" - в смысле количество и вид параметров документа настраивается без перепрограммирования БД?
"проводки по этим документам и аналитикам" - в смысле содержание проводок формируемых по первичным документам настраивается без перепрограммирования БД?
Если это так - то подобные возможности предоставляют практически все общедоступные учетные системы (которые построены совсем не "по Тенцеру")

Да, включая и проектирование экранных форм документов, разработку новых справочников (и их экранных форм) для аналитического учета и т.д. М.б. какие-то учетные системы это и позволяют (далеко не все), но с моделью EAV это делать проще.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33452013
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcA wrote:
> Я таки понял в каких случаях схема "по Тенцеру" себя оправдывает -
>
> 1. Система должна просто "фиксить" результаты хоз деятельности
поскипано...
> предприятии достаточно долго, чтобы знать ньюансы бизнес процессов.
>

и причему тут организация бизнес процессов, квалификация пользователей,
плановые показатели и проч. к модели данных? Модель Тенцера в 95%
случаев прямо трансформируется в обычную 3НФ. когда мне приходит в
голову сгененрировать диаграмму, я запускаю небольшой скрипт, который на
основании модели Тенцера генерирует привычную БД в 3Нф (заодно и данные
туда переливает).
Я понимаю, когда имеются опасения насчет производительности - да, там не
всё так гладко, хотя во многих случаях получается лучше, чем при 3НФ.
Бывает, однако, что и голову приходится поломать...

а пассаж насчет "Основной контингент операторов - достаточно
квалифицированы, чтобы правильно заполнять документы/получать отчеты.
Они работают на предприятии достаточно долго, чтобы знать ньюансы бизнес
процессов." - довёл до нервного тика... какая пользователю разница, что
лежит в глубине приложения? Пусть там хоть б-трив лежит, если в системе
не предусмотрены проверки/схемы заполнения/схемы оформления и проч. -
кака таки будет.

-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33452609
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это на самом деле уже оффтоп - но я просто отвечаю на Ваш вопрос, locky. Если есть желание поспорить каким боком модель данных/архитектура приложения могут повлиять на бизнес процессы - открывайте новый топик - там и поспорим.

lockyи причем тут организация бизнес процессов?

Модель данных определяет логику работы с системой и накладывает определенные ограничения на функционал.

набор документов определяет пользователь
набор аналитик определяет пользователь
проводки по этим документам и аналитикам настраивает пользователь
БП настраивает пользователь

Поскольку функционал в данном случае определяется пользователем, а документ = часть бизнес процесса - делаю вывод, что причем.

lockyкакая пользователю разница, что
лежит в глубине приложения? Пусть там хоть б-трив лежит, если в системе
не предусмотрены проверки/схемы заполнения/схемы оформления и проч. -
кака таки будет.

Механизмы валидации данных вводимых в Систему- вещь стандартная. Речь не о них.

Любой класс Системы является так или иначе отображением бизнес-процессов предприятия на структуру Системы. Документы и справочники не существуют как вещь в себе, они организуют какую-то функцию.

Я так понял - Вы утверждаете, что используя ограниченный инструменарий настроек документов/справочников Вы в состоянии адекватно реализовать систему реализующую бизнес процессы любого предприятия?
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33453030
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcA wrote:
> locky
> и причем тут организация бизнес процессов?
>
> Модель данных определяет логику работы с системой и накладывает
> определенные ограничения на функционал.
да вы что!!!!!!
То исть, в зависимости от того, как я храню данные, я могу или не могу
провести некую операцию???
типа... если я веду бумажный учет, то поставить на забаланс при выдаче
МНМА в эксплуатацию я могу (модель данных - складские карточки), а если
я пытаюсь сделать то-же самое в Excel - то пол руки??
даже немного не так... карточки, эксель - не модель данных, всё таки...

а! если я храню карточки в шкафах - то могу, а если храню карточки в
тумбочках - то не могу???


> locky
> какая пользователю разница, что
> лежит в глубине приложения? Пусть там хоть б-трив лежит, если в системе
> не предусмотрены проверки/схемы заполнения/схемы оформления и проч. -
> кака таки будет.
> о них.
>
> Любой класс Системы является так или иначе отображением бизнес-процессов
> предприятия на структуру Системы. Документы и справочники не существуют
> как вещь в себе, они организуют какую-то функцию.
>
> Я так понял - Вы утверждаете, что используя ограниченный инструменарий
> настроек документов/справочников Вы в состоянии адекватно реализовать
> систему реализующую бизнес процессы любого предприятия?
так смело бы я не сказал, но... в целом очень близко. очччень близко.
зы правда стоит сказать о настройке... начинали мы со структуры данных,
а переключились уже на функционал, всё таки... скажем, используя некий
внутренний язык нашей системы и обладая необходимыми знаниями самой
системы и предметной области Вы можете покрыть практически любое
предприятие. Вот такой вот лозунг в стиле 1-сы.

ззы кста, клёвое слово - "покрыть". как бык овцу...

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33453086
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyТо исть, в зависимости от того, как я храню данные, я могу или не могу провести некую операцию???
если я храню карточки в шкафах - то могу, а если храню карточки в
тумбочках - то не могу???


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

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

Т.е. присутствует некий проблемно-ориентированый язык, который дополняет настраиваемую структуру документов/справочников и реализует особенности бизнес логики? Насколько я понимаю - это делается "пользователем", который открыв настройки документа/справочника прописывает некоторые функции?
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33453105
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcA wrote:
> locky
> То исть, в зависимости от того, как я храню данные, я могу или не могу
> провести некую операцию???
> если я храню карточки в шкафах - то могу, а если храню карточки в
> тумбочках - то не могу???
>
> Несколько утрировано и нарочито. Но даже и здесь - в шкафах вы можете
> просмотреть взглядом разделы и карточки (как в библиотеке) а в тумбочках
> - придется открывать ящики, чтобы понять - есть там нужная карточка или нет.
Намеренно утрировано и нарочито, типа гипербола.
Ха! то что мне надо открывать тумбочки значит только одно: для
выполнения каких-то операций мне придется потратить больше времени. Это
ведь не создает приницпиальную невозможность проведения операции,
n'est-ce pas?

>
> locky
> используя некий внутренний язык нашей системы и обладая необходимыми
> знаниями самой системы и предметной области Вы можете покрыть рактически
> любое предприятие. Вот такой вот лозунг в стиле 1-сы.
>
> Т.е. присутствует некий проблемно-ориентированый язык, который дополняет
> настраиваемую структуру документов/справочников и реализует особенности
> бизнес логики? Насколько я понимаю - это делается "пользователем",
> который открыв настройки документа/справочника прописывает некоторые
> функции?
угу. Только юзер должен быть шибко грамотным :-) Не для него это всё, а
для программера, если честно. поскоку в качестве внутреннего языка
используется т-скл.
И ваще, как то мы ушли в сторону от модели Тенцера и побрели в сторону
легко-адаптируемых систем. Скоро сызнова призовём аскруса, который нам
поведает тонкости реализации алгоритмов расчетов, привязанных к периодам :-)

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33453130
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
накладывает определенные ограничения на функционал
lockyЭто ведь не создает приницпиальную невозможность проведения операции

Как мне кажется - я сказал несколько по другому.

lockyИ ваще, как то мы ушли в сторону от модели Тенцера и побрели в сторону легко-адаптируемых систем.
Насколько я понял - основным и главным преимуществом архитектуры "по Тенцеру" как раз и заявлялась эта самая "легко адаптируемость".

А теперь еще оказывается
lockyв качестве внутреннего языка используется т-скл.
и целесообразность построения ERP(!!!) системы полностью по такой архитектуре требует таки квалифицированного специалиста.

Короче пришли к тому, что я и ожидал. Очередной велосипед завода им.Лихачева.

Можете не отвечать на мой пост locky. То, что Вы предлагаете я уже не раз видел. Дальнейшее описание Вашей без сомнения супер Системы меня уже не интересует. Спасибо и до свидания.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33454053
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcA wrote:
>
> и целесообразность построения ERP(!!!) системы полностью по такой
> архитектуре требует таки квалифицированного специалиста.
>
> Короче пришли к тому, что я и ожидал. Очередной велосипед завода
> им.Лихачева.
>
> Можете не отвечать на мой пост locky. То, что Вы предлагаете я уже не
> раз видел. Дальнейшее описание Вашей без сомнения супер Системы меня уже
> не интересует. Спасибо и до свидания.
ваще-то я рассматривал Тенцера не с точки зрения меня как
внедренца/пользователя, а с точки зрения меня как программера.
Никто не спорит - очередной велосипед, может быть даже имени Лихачева.
И систем подобной архитектуры сейчас - через одну, ежели не 2 из 3-х...
удобно для разработки, знаете ли... не коробки пишем, под заказ...
В коробках - это 1С, как её не ругают, а франчайзи довольны...
мы же можем себе позволить использовать т-скл для настройки - сами то и
настраиваем, да и обучить толкового прогера заказчика - проблема
относительно небольшая.
Зато достигается значительная скорость работы - всё ж родное, нативное :-)

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33455535
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГЫ! Снова за старое!?

ЗЫ Считаю, что уже пришло время когда адекватного специалиста по проектированию БД можно будет выявлять в том числе с помощью вопроса: что он думает про модель Тенцера... Адекватным должно быть, во-первых, известно, что EAV люди знали задолго до Тенцера и в книгах по проектированию уделяли ей обычно не более пары страниц, во-вторых, что это не модель данных, в третьих, что утверждение "объектная модель хорошо ложится на модель Тенцера" выдает, что говорящий не понимает предмета, в-четвертых ... ну и т.д.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33455754
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri wrote:
> ГЫ! Снова за старое!?
а то!
>
> в третьих, что утверждение "объектная модель
> хорошо ложится на модель Тенцера" выдает, что говорящий не понимает
> предмета, в-четвертых ... ну и т.д.
хм.. у меня справочники - почти что объекты, тем паче что в силу
реализации работать с изменением в них данных приходится исключительно
через спец-апи :-(
Никаких тебе прямых обновлений таблиц... заполнил параметры вызова,
вызвал обработчик...
и в каждом втором справочнике перекрыты методы
создания/редактирования/проверки/удаления с вызовом inherited методов :-)
очень похоже. Хотя и не объекты.

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33476326
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nnovУ кого какие мнения по поводу модели Тенцера

1) Использую что-то подобное, "кустарно" расширенную EAV. Меня устраивает. Объёмы, правда, пока небольшие - 8 классов объектов, у каждого ~ 1000 свойств. ~400 экземпляров. Быстродействие - вполне: СУБД умеет неплохо оптимизировать запросы, если не слишком "мудрить" с ними.

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

3) Система получается универсальнее, чем нужно на данный момент. Т.е. может получиться сложнее и дороже сначала, а что потом будет легче и проще - никто не гарантирует. Лично для меня это вполне - предметная область такая: поддержка принятия решений при сертификации, притом, что сертификационные требования (=>структуры паспортов объектов) изменяются, классы добавляются и т.д.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33476492
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закину ка я сюда для примера один из запросов из системы Тенцера, что бы ощутить глубину так сказать...
Взят из конфы, пытался его несколько отформатировать, для прочтения но не очень-то получилось.

Видел этот запрос ДО и ПОСЛЕ прочтения статьи.
ДО - непонятно вообще нифига.
ПОСЛЕ - уже можно ковыряться.

Hello Igor.

Вторник Февраль 27 2001 12:19, you wrote to All:

IT> ПРИМЕР ТЕнцера в студию! Пущай Попов покажет этим MSSQL'истам!
на деле примеров от Анатолия была куча и куда более большие, а это
видимо, то, что под руку попалось.

-=== Cut ===-
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
  SELECT T.*, 
         - DATEDIFF(day, @EndDate +  1 , CASE WHEN @StartDate > T.ItemDate
                                              THEN @StartDate
                                              ELSE T.ItemDate END) 
         * T.Amount * @PayPercent * T.[Index] /  100  AS Income
  FROM ( SELECT T1.*, (SELECT -SUM(CASE WHEN MM.Direction =  0  AND O.TypeId <> @TAccount
                                          THEN MM.DirAmount
                                        WHEN MM.Direction =  1  AND H2.Id IS NOT NULL
                                          THEN DirAmount
                                          ELSE  0  END)
    FROM Movement MM WITH(INDEX(IN_Movement_GroupIdContentId))
      LEFT LOOP JOIN Objects O ON O.Id = MM.ContainerId
      LEFT LOOP JOIN History H2 ON H2.ObjectId = MM.ContainerId AND
H2.StatusId IN (@IODate, @ITDate) AND H2.ObjectId = MM.ContainerId AND
H2.ItemDate < @EndDate +  1 
    WHERE MM.GroupId = T1.Id AND MM.ContentId = @Roubles
  ) AS Amount
  FROM (
  SELECT M.GroupId AS Id,
         H2.ItemDate,
         D.DocNum,
         OT.ItemName AS Type,
         OC.Itemname AS Contractor,
         OC.Id AS ContractorId,
         OM.ItemName AS Manager,
         PInd.Value AS [Index]
    FROM History H
      INNER LOOP JOIN Movement M WITH(INDEX(IN_Movement_ContainerId))
                      ON M.ContainerId = H.ObjectId 
                     AND M.ContentId = @Roubles
      INNER LOOP JOIN Objects O1
                      ON O1.Id = M.GroupId 
                     AND O1.TypeId IN (@CashOrder, @DraftIn)
      INNER JOIN Links L ON L.ChildId = M.GroupId 
                        AND L.TypeId = @Contractor
      INNER JOIN Links LM ON LM.ChildId = L.ParentId 
                         AND LM.TypeId = @Manager 
                         AND ISNULL(@ManagerId, LM.parentId) = LM.parentId
      INNER JOIN History H2 ON H2.ObjectId = M.GroupId 
                           AND H2.ItemDate < @EndDate +  1 
      INNER JOIN Status S2 ON S2.Id = H2.StatusId 
                          AND S2.Code = 'DATE'
      INNER JOIN History H1 ON H1.ObjectId = M.ContainerId
      INNER JOIN Status S ON S.Id = H1.StatusId 
                         AND S.Code = 'PAYDATE'
      INNER LOOP JOIN Objects OM ON OM.Id = LM.parentId
      INNER LOOP JOIN Objects OC ON OC.Id = L.ParentId
      LEFT LOOP JOIN Properties PInd ON PInd.ObjectId = OC.Id 
                                    AND PInd.TypeId = @Index
      INNER LOOP JOIN Doc D ON D.Id = M.GroupId
      INNER LOOP JOIN Objects O ON O.Id = M.GroupId
      INNER LOOP JOIN ObjType OT ON OT.Id = O.TypeId
   WHERE H.StatusId IN (@IODate, @ITDate) AND H.Itemdate >= @EndDate +  1 
     AND (H2.StatusId = @CODate OR EXISTS(SELECT TOP  1  * FROM MoveLink ML
                                           INNER JOIN History HL ON HL.ObjectId = ML.ObjectId
                                           INNER JOIN Status SL ON SL.Id = HL.StatusId 
                                                               AND SL.GroupId = @AccType 
                                                               AND SL.Code IN ('BANK', 'VEXELMANY')
                                          WHERE ML.MoveId = M.Id 
                                            AND ML.TypeId = @Account))
     AND NOT EXISTS (SELECT TOP  1  * FROM History 
                       WHERE ObjectId = H2.ObjectId AND StatusId = @Tender)
  UNION
  SELECT LMP.ChildId AS Id,
         H2.ItemDate AS DocDate,
         D.DocNum,
         OT.ItemName AS DocType,
         OC.Itemname AS Contractor,
         OC.Id AS ContractorId,
         OM.ItemName AS Manager,
         PInd.Value AS [Index]
    FROM Objects O
      INNER LOOP JOIN Links LM ON LM.ChildId = O.Id AND LM.TypeId = @Manager
AND ISNULL(@ManagerId, LM.parentId) = LM.parentId
      INNER LOOP JOIN Links LMP ON LMP.TypeId = @MustCompl AND LMP.ParentId
= O.Id
      INNER LOOP JOIN Objects O1 ON O1.Id = LMP.ChildId AND O1.TypeId IN
(@InvoiceOut, @InvoiceTr)
      INNER LOOP JOIN History H1 ON H1.ObjectId = O1.Id AND H1.ItemDate <
@EndDate +  1 
      INNER LOOP JOIN Status S ON S.Id = H1.StatusId AND S.Code = 'PAYDATE'
      INNER JOIN History H2 ON H2.ObjectId = LMP.ChildId AND H2.ItemDate <
@EndDate +  1 
      INNER JOIN Status S2 ON S2.Id = H2.StatusId AND S2.Code = 'DATE'
      INNER LOOP JOIN Doc D ON D.Id = O1.Id
      INNER LOOP JOIN ObjType OT ON OT.Id = O1.TypeId
      INNER JOIN Objects OM ON OM.Id = LM.parentId
      INNER JOIN Objects OC ON OC.Id = O.Id
      LEFT LOOP JOIN Properties PInd ON PInd.ObjectId = OC.Id AND
PInd.TypeId = @Index
   WHERE O.TypeId = @Firm
     AND NOT EXISTS (SELECT TOP  1  * FROM History WHERE ObjectId =
LMP.ChildId AND StatusId = @Tender)
     AND (O1.TypeId = @InvoiceTr OR EXISTS (SELECT TOP  1  *
                                              FROM Links L
                                                INNER LOOP JOIN History H ON
H.ObjectId = L.ParentId
                                                INNER LOOP JOIN Status S ON
S.Id = H.StatusId AND S.GroupId = @CalcStyle AND S.Code IN
('CSDELAY','CSCASH','CSPREPAY')
                                             WHERE L.ChildId = O1.Id AND
L.TypeId = @InvQueryOut
                                           ))
  ) AS T1
  ) AS T
  ORDER BY T.Manager, T.Itemdate, T.DocNum

-=== Cut ===-

а записей там под 10М.

Andrew
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33477434
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks wrote:
> Закину ка я сюда для примера один из запросов из системы Тенцера, что бы
> ощутить глубину так сказать...
> Взят из конфы, пытался его несколько отформатировать, для прочтения но
> не очень-то получилось.
>
> Видел этот запрос ДО и ПОСЛЕ прочтения статьи.
> ДО - непонятно вообще нифига.
> ПОСЛЕ - уже можно ковыряться.
у нас до 70-ти и более джойнов доходит....

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33478316
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Код: plaintext
<...запрос на  3  экрана...>

Какой ужас!

Может быть, мы что-то неправильно делаем, но у нас всё проще и при этом работает:). Правда, о модели Тенцера я не говорю - только о EAV, несколько расширенной для хранения исторических данных.

К примеру, извлечение свойства сертифицируемого объекта в EAV:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT DISTINCT value
FROM property_values 
    JOIN healing_object_properties
    ON property_values.healing_object_property_id=healing_object_properties.healing_object_property_id
WHERE healing_object_id='$healing_object_id'
    AND healing_object_properties.name='$healing_object_property_name'
    AND property_values.state='Актуальное'

При этом от JOIN'а вообще можно избавиться, применив WHERE healing_object_property_id IN (subquery). Хотя я подозреваю, что оптимизатор уже делает это.

Если бы модель была ROT, "1 класс = 1 таблица", было бы, наверное:

Код: plaintext
1.
2.
3.
SELECT DISTINCT $healing_object_property_name
FROM healing_objects
WHERE healing_object_id='$healing_object_id'

По-моему, возможность безболезненно добавлять и изменть свойства, а также хранить исторические данные вполне стоит выполнения одного дополнительного JOIN'а или одного дополнительного подзапроса.
...
Рейтинг: 0 / 0
Модель данных по Тенцеру
    #33482032
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут немного томожу по болезни, но Вы мне объясните сакральный смысл:

Зачем делать много join в запросе при выборе свойств объекта?

Для того, чтобы resultset вернулся в виде таблицы со всемы свойствами "развернутыми" в колонки?

У меня такой ORM делается на уровне бизнес - логики.

Или я таки что-то не понял?
...
Рейтинг: 0 / 0
25 сообщений из 161, страница 2 из 7
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Модель данных по Тенцеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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