powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SELECT : вопрос к гуру :)
25 сообщений из 46, страница 1 из 2
SELECT : вопрос к гуру :)
    #32147091
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
Подскажите, кто знает, как решить следующую проблему:

Cуществует таблица с данными, например TBL1.
Она связана с справочниками STBL1, STBL2, STBL3...
Связь TBL1->STBL1 = 1-ко многим, TBL1->STBL2 = 1-ко многим ...

Но особенность ситуации заключается в следующем:
каждай запись таблицы TBL1 связана ИЛИ c STBL1 ИЛИ с STBL2 ...

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

Вопрос состоит в следующем:
~~~~~~~~~~~~~~~~~~~
1. Как правильно построить структуру БД для данного случая,
в принципе, можно рассматривать несколько вариантов, но мне
почему-то ни один не нравится :)
2. Как построить эффективный SELECT для вибора данных с таблиц TBL1, STBL1 ?
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147107
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно и тоже поле связано в одной и той же таблице связано с
несколькими справочниками? Т.е. выбор значения поля одно из значений
хотя бы в одной справочной таблице?
Я правильно понял?
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147111
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
В принцыпе да.
Но в вашем вопросе - содержится сразу и предложение
определенной структуры (одного из вариантов)
Но логически - именно так.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147127
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько сущностей например с двумя полями:
ссылка на журнал операций и ссылка на требуемый справочник.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147128
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятна ситуация когда это необходимо.

На вскидку в журнал попадают счета и платежки
и те и другие имеют разные структуры
но должна попадать в одно и тоже поле

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

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

Третьий вариант. Наплевать на непрерывную целостность данных и отлавливать некорректные строки через JOB. Это в принципе хорошо прокатывает только когда журнал и заполняется пакетными заданиями а не по пользовательскому произволу.

По моему так
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147133
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вообще это плохо.

Самым правильным вариантом был бы один большой справочник в котором было бы всё, но бог велел делиться.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147146
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
Браво ! (на счет общего справочника)
Во многих случаях так и решают.
Но это несколько сложно в случае если справочники
имеют совершенно различние структуры (сущности), например:
Люди
Предприятия
Материалы
...
Именно так дела обстоят на практике.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147147
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что это за поле где хранятся и люди и материалы и предприятия
Я просто ТАКОГО представить не могу.
Опиши бизнесс процесс.
Может что придумать можно
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147148
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем не устраивает предложенный мной вариант?
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147153
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MW

Не как связать это просто. Длается поле указатель на соответсвующую сущность и через него коннектишся. Здесь все согласны.
На это завязаны все возможные варианты.
Другое дело где эту сущность хранить и как обрабатывать.

Думаю имелось ввиду что-то вроде Junction Table но в данном случае от её наличия или отсутствия ничего не меняется. Грабли всё равно остаются.

Или я чего не понял.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147156
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
Приведу простой пример:
Он хорошо известен разроботчикам различных учетных задач:

cуществует "журнал операций"
1.Количество (Дебет, Кредит)
2.Сума (Дебет, Кредит)
3.Аналитика (Люди,Предприятия,Материалы и т.д)

В эту таблицу попадают бухгалтерские проводки, которые формируются различными документами (чево-то типа таблицы фактов OLAP).

Аналитика- это различные справочныки (в т.ч. многоуровнивые).

Вот и весь бизнес-процесс.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147164
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут все просто. Если я правильно понял проблема в подцеплении аналитического учета?
В журнал операций добывляется код аналитики (1-материалы, 2 - персонал и т.п), и поле которое будет содержать значение аналитики (код из справочника никак не привязанный к нему, но это для ускорения, т.е. можно и не делать). Далее делается по промежуточной таблице для каждого справочника запись в этих таблицах содержит ссылку на строку журнала операций и на требуемую строку справочника. И заполняется триггером при вставке записи в журнал операций (отношение один к одному).
Ведь выборки по разным аналитическим данным _обычно_ не делаются. В данном случае выборку по журналу операций указав код аналитического учета сделать очень просто.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147165
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогад MW наверное прав

1) Сделать Junction TABLE
в ней хранить все возможные типы аналитики много строк, мало собственно информации.
2) заполнять Junction TABLE пакетным заданием из нормальных справочников
3) и классический FK
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147169
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
Наверное я или немогу описать проблему или она действительно неразрешима ????
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147170
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний раз мы с MW поняли тебя одинаково.

Задача красиво действительно неразрешима.

Но решение работающее вполне есть см выше.
Чем не устраивают предложенные.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147172
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
>> Eter Panji
Еще раз браво !
Это очень близко к решению, к которому я пришел.
Но я извеняють за невежество, что такое Junction TABLE ?
Как сопровождать Junction TABLE ? Триггерами ?
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147174
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Ключевая фраза":
Промежуточная таблица не одна а несколько:

MAINBOOK( ID, VID) -- журнал операций VID = 1 для персонала, =2 для материалов
LINK_PERSONAL( PERSONAL_ID, MAINBOOK_ID)
LINK_MATERIAL( MATERIAL_ID, MAINBOOK_ID)
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147178
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в данном случае
JUNCTION TABLE - журнал всех типов аналитики

Если исходные таблицы-справочники заполняются редко то самое лучшее
поставить JOB который с какой-то периодичностью будет синхронизировать справочники и JUNCTION TABLE

Если часто тогда действительно лучше триггерами на справочниках.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147179
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем несколько?
Выигрыш будет небольшой,
или ...
это получится отношение многие ко многим?
А зачем оно вообще нужно в данном контексте.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147180
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
>All
Спасибо огромное !
Мне действительно некоторые вещи стали более понятны.
В особенности, у меня исчезно какоето-болезненное
впечатление, что я никак не могу просто и эффективно (без промежуточных таблиц ) решить это проблему.
На самом деле, наверное действително так ее решить невозможно.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147183
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А невозможно разные сущности свести к одной ссылке, нарушается целостность данных.
И скажите мне в каких случаях может потребоватся запрос на одновременный вывод данных по разным видам аналитического учета?
И даже в этом случае можно выйти из положения по предложенной схеме. И не требуется никаких обновлений.
Отношение один к одному, вставка в промежуточную таблицу при сохранении документа и создании записи в журнале операций, ведь заранее известно какой документ какие виды аналитики на себе несет.
А если схема данных организована еще грамотнее (на полупроводках), то это еще снимет массу головной боли в последствии.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147185
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
>И скажите мне в каких случаях может потребоватся запрос на >одновременный вывод данных по разным видам аналитического учета?

Просто вывести на экран (отчет) журнал операций. И все.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147187
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там требуется вывод аналитики?
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147190
ov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ov
Гость
В принципе, да. Т не только там.
То же самое - любой бухгалтерский документ: например, акт о приеме материалов - там тоже присутствует аналитика.
И когда необходимо высести "журнал документов", в нем есть поле :
от кого получено, кому передано и т.д.
...
Рейтинг: 0 / 0
SELECT : вопрос к гуру :)
    #32147193
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не вопрос:

select m.id, m.vid, m.summa, mt.name
from mainbook m, link_material lm, material mt
where m.id = lm.mainbook_id
and m.vid = 1
and lm.material_id = mt.id
union
select m.id, m.vid, m.summa, p.name
from mainbook m, link_personal lp, personal p
where m.id = lp.mainbook_id
and m.vid = 2
and lp.personal_id = p.id
union
и т.п
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SELECT : вопрос к гуру :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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