Описать взаимосвязь в maximo 7.5

Опишите взаимосвязь в maximo 7.5 со всеми подробностями, включая внутренний процесс базы данных.

Предположим, я создаю связь в управлении активами maximo 7.5 между owner_group и person_group "owner_group=:person_group", тогда каково фактическое значение этого запроса. Я совершенно запутался в этом.

Не могли бы вы объяснить, что такое процесс в базе данных?


person Mr. Nobody    schedule 18.03.2015    source источник
comment
Когда вы создаете отношение, какой родительский объект и какой дочерний объект, на который вы ссылаетесь? Родительский объект — это выбранный вами объект конфигурации базы данных. Дочерний объект — это таблица, к которой вы хотите привязаться.   -  person Sun    schedule 18.03.2015


Ответы (2)


«Взаимосвязи» Maximo — это просто фрагмент предложения «where» оператора SQL. «Дочерний объект», который вы определяете, — это таблица, для которой будет выполняться «предложение where».

Серверная часть Maximo всегда начинается с «select * from». Затем он добавит имя таблицы вашего дочернего объекта (которое почти всегда является именем самого объекта). Затем он добавляет «где» и текст ваших отношений. В конце концов, Maximo выполняет запрос "выбрать * из ‹объект>, где ‹отношение>" к базе данных. Затем он загрузит результаты в набор MBOSet из ‹object>.

Это не столько соединение, сколько переход/переключение на другую таблицу. Поскольку это не соединение, запрос не имеет контекста данных объекта, с которого вы начали. Чтобы иметь возможность использовать данные из вашего исходного объекта для фильтрации набора целевых объектов, вы можете использовать привязки полей, те части «имя поля с двоеточием» фрагмента предложения where. Maximo выполнит поиск и замену всех найденных привязок, заменив их данными из соответствующих имен полей вашего начального объекта. Именно здесь в игру вступает установка отношения «родительский объект». Это означает, что Maximo будет выполнять этот запрос только в том случае, если вы начнете с записи типа, равного "родительскому объекту", чтобы он знал, откуда берутся эти привязки полей.

Возможно, стоит упомянуть, что связь должна начинаться с одного объекта (MBO), а не набора объектов (MBOSet), чтобы разрешить эту работу. Однако, поскольку запрос возвращает одну или несколько записей в своем результате, вы всегда получите набор объектов (MBOSet) из отношения. Кроме того, поскольку это поиск и замена перед выполнением запроса, Maximo не использует преимуществ какой-либо функции кэширования планов запросов к базе данных; каждый запрос выглядит по-разному для базы данных и повторно анализируется перед выполнением.

Например, если вы хотите создать связь между Активом и Заказом на работу, чтобы получить все открытые заказы на работу для актива, вы должны сделать следующее: Создать связь с дочерним объектом ЗАКАЗА НА РАБОЧИЙ, потому что это тип записи, который вы хотите получить назад. Вам нужны все открытые заказы на работу, поэтому вы начинаете текст отношений со «status = 'OPEN'». Вам также нужны рабочие заказы только для актива, который вы сейчас просматриваете, это означает, что вы хотите использовать данные из вашего текущего объекта, поэтому вам нужно использовать привязку поля. В этом случае вы хотите отфильтровать записи заказов на работу, чей номер актива совпадает с номером актива вашей текущей записи, это означает, что вы добавляете «и актив номер = : номер актива» в предложение text/where вашего отношения (что дает вам «статус = 'ОТКРЫТО' и номер актива = :assetnum" для вашей общей строки отношений). Первый номер объекта без двоеточия означает, что это обычный текст запроса, который будет выполняться как есть. Второй актив с двоеточием сообщает Maximo, что это привязка, которую необходимо заменить. Порядок не имеет значения, важно только двоеточие. Maximo найдет поле актива вашего текущего объекта (АКТИВ) и поместит содержимое этого поля (скажем, активнум "Blower0082") в запрос вместо ":ассетнум". Конечным результатом этого определенного отношения при запуске на этом конкретном активе является то, что Maximo выполняет следующий запрос к базе данных и загружает все результаты в MBOSet WORKORDER: выберите * из WORKORDER, где статус = 'OPEN' и номер актива = 'Blower0082';

Ваш конкретный пример owner_group = :person_group сам по себе не имеет смысла; также необходимы родительский объект (чтобы Maximo знал, откуда брать данные связывания и когда ему разрешено выполнять этот запрос) и дочерний объект (чтобы он знал, из какой таблицы он выбирает). Я собираюсь предположить, что у него есть родительский объект PERSONGROUP и дочерний объект WORKORDER. Поскольку "person_group" начинается с двоеточия, Maximo заменит эту строку содержимым поля person_group вашего родительского объекта, поэтому поле person_group должно существовать в вашем родительском объекте. Так как owner_group не имеет двоеточия перед ним, это нормальный синтаксис SQL, и поэтому это поле должно существовать в вашем дочернем/целевом объекте. Эта связь даст вам все заказы на работу, принадлежащие записи группы лиц, которую вы загрузили в данный момент. Предполагая, что персональная группа является «сантехниками», будет выполнен следующий запрос и возвращены все рабочие заказы, которыми в настоящее время владеют сантехники: выберите * из РАБОЧЕГО ЗАКАЗА, где owner_group = 'сантехники';

person Dex    schedule 19.03.2015
comment
+1, но не согласен с функцией кэширования плана запросов к базе данных. Для Oracle IBM рекомендует изменить cursor_sharing на принудительный (или, по крайней мере, аналогичный), который изменяет литеральные переменные на связываемые. www-01.ibm.com/support/docview.wss?uid= swg21262959 Если вы правильно настроили базу данных Maximo, активируется функция кэширования плана запроса к базе данных. В SQL Server та же концепция называется автоматической параметризацией: technet.microsoft.com/en-us/library/ms175580(v=sql.105).aspx - person Sun; 16.03.2016
comment
@ sunk818, достаточно честно. Я имел в виду приложение, использующее кэширование плана запроса, но вы правы в том, что многие базы данных вырвут контроль и реализуют его на своей стороне, если приложение этого не сделает (чего нет). - person Dex; 24.03.2016

Вы можете думать об отношениях Maximo в тех же терминах, что и о соединении SQL.

В разделе «Конфигурация системы» > «Конфигурация платформы» > «Конфигурация базы данных» каждый объект может иметь отношение, связанное с дочерним объектом.

Например, если вашим родительским объектом является заказ на работу, я создам отношение с именем OWNERPERSON, где дочерним объектом является PERSON.

Предложение Where personid = :owner означает, что когда дочерний объект (PERSON) приносит результат из предложения where personid = :owner, тогда могут отображаться связанные данные. :owner — это переменная в WORKORDER.

Если значение :owner в WORKORDER равно Chip_Drapeau, вы можете отобразить любой из дочерних объектов PERSON, где personid = Chip_Drepeau

Надеюсь это поможет.

введите здесь описание изображения

person Sun    schedule 18.03.2015