Настройка связей между объектами

В MDT есть возможность настраивать логические связи между объектами, которые помогают более удобно работать с данными.

o2o-связь

o2o-связь (One-to-one) позволяет расширить таблицу дополнительными атрибутами из другого o2o-объекта (таблица, представление).

Связь таблицы с представлением (с помощью логического o2o-поля) позволяет расширить таблицу динамическим полем, которое будет рассчитываться в зависимости от логики в представлении.

В дополняющем данными объекте, должна быть ссылка на расширяемую таблицу и она должна быть уникальна. В расширяющем объекте, должен быть уникальный атрибут для ссылки логического о2о-поля.

о2о-поле в списке и форме

Пример

Рассмотрим пример добавления o2o-поля:

  • Таблица Заявление со следующими атрибутами:

    • ID_Employee — сотрудник.

    • TextStatement — текст заявления.

    • DateStatement — дата заявления.

    • D_StatementType — ссылка на таблицу Тип заявления.

  • Таблица Тип заявления со следующими атрибутами:

    • Code — код.

    • Title — название.

  • Представление (View), определяющее является ли заявление — заявлением на отпуск:

    • ID_Statement — ссылка на таблицу Заявление (уникальный атрибут).

    • FlagIsVacation — признак, определяющий является ли заявление — заявлением на отпуск. Логически вычисляемый атрибут.

Пример представления, расширяющего таблицу:

create or alter view onboarding.vw_Statement_o2o_FlagIsVacation as select -- получаем ID заявления s.ID as ID_Statement -- получаем признак, что заявление на отпуск, если поле "Код" = "VacSt" ,cast(iif(st.Code = 'VacSt', 1, 0) as bit) as FlagIsVacation from onboarding.Statement as s inner join onboarding.StatementType as st on st.ID = s.ID_StatementType
Пример добавления o2o-поля

o2m-связь

o2m-связь (One-to-many) позволяет с одной записью главной таблицы сопоставить несколько записей подчиненной таблицы.

о2m-поле в списке и форме

Пример

Рассмотрим пример добавления o2m-поля:

  • Справочник Автор — главная таблица, с данными:

    • Name — ФИО.

    • Age — возраст.

  • Справочник Книги — подчиненная таблица, связанная с таблицей Авторов:

    • ID_Book — ссылка на справочник Книга.

    • ID_Author — ссылка на справочник Автор.

Пример добавления o2m-поля

history-связь

history-связь работает аналогично полям с o2m-связью. Отличие заключается в том, что history-поле в интерфейсе отображается с актуальной на текущую дату записью. Для этого таблица, которая связана через history-поле, обязательно должна содержать в себе поля DateBegin и DateEnd.

Для корректного отображения значений history-поля необходимо, чтобы были заполнены оба атрибута в записи: DateBegin и DateEnd. Если оставить один из атрибутов незаполненным (например DateEnd), такая запись не будет отображаться в списочной форме. Для актуальной записи, следует установить значение атрибута DateEnd датой из будущего.

history-поле в списке и форме

Пример

Рассмотрим пример добавления history-поля:

  • Справочник Книга, в которой хранятся данные:

    • Name — наименование.

    • ID_Author — ссылка на справочник Автор.

  • Справочник Читатель, в котором хранятся данные:

    • Name — ФИО.

    • CardNumber — номер читательского билета.

  • Таблица Журнал движения книг, в которой хранится информации о взятых читателями книгах:

    • ID_Reader — ссылка на справочник Читатель.

    • ID_Book — ссылка на справочник Книга.

    • DateBegin — дата выдачи книги читателю.

    • DateEnd — дата возврата книги читателем.

Пример добавления history-поля

Логические о2о-, o2m-, history-поля не хранятся в таблице, в отличие от физических полей, а лишь расширяют данную таблицу.