Настройка связей между объектами
В MDT есть возможность настраивать логические связи между объектами, которые помогают более удобно работать с данными.
o2o-связь
o2o-связь (One-to-one) позволяет расширить таблицу дополнительными атрибутами из другого o2o-объекта (таблица, представление).
Связь таблицы с представлением (с помощью логического o2o-поля) позволяет расширить таблицу динамическим полем, которое будет рассчитываться в зависимости от логики в представлении.
В дополняющем данными объекте, должна быть ссылка на расширяемую таблицу и она должна быть уникальна. В расширяющем объекте, должен быть уникальный атрибут для ссылки логического о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
o2m-связь
o2m-связь (One-to-many) позволяет с одной записью главной таблицы сопоставить несколько записей подчиненной таблицы.
Пример
Рассмотрим пример добавления o2m-поля:
Справочник Автор — главная таблица, с данными:
Name
— ФИО.Age
— возраст.
Справочник Книги — подчиненная таблица, связанная с таблицей Авторов:
ID_Book
— ссылка на справочник Книга.ID_Author
— ссылка на справочник Автор.
history-связь
history-связь работает аналогично полям с o2m-связью. Отличие заключается в том, что history-поле в интерфейсе отображается с актуальной на текущую дату записью. Для этого таблица, которая связана через history-поле, обязательно должна содержать в себе поля DateBegin
и DateEnd
.
Для корректного отображения значений history-поля необходимо, чтобы были заполнены оба атрибута в записи: DateBegin
и DateEnd
. Если оставить один из атрибутов незаполненным (например DateEnd
), такая запись не будет отображаться в списочной форме. Для актуальной записи, следует установить значение атрибута DateEnd
датой из будущего.
Пример
Рассмотрим пример добавления history-поля:
Справочник Книга, в которой хранятся данные:
Name
— наименование.ID_Author
— ссылка на справочник Автор.
Справочник Читатель, в котором хранятся данные:
Name
— ФИО.CardNumber
— номер читательского билета.
Таблица Журнал движения книг, в которой хранится информации о взятых читателями книгах:
ID_Reader
— ссылка на справочник Читатель.ID_Book
— ссылка на справочник Книга.DateBegin
— дата выдачи книги читателю.DateEnd
— дата возврата книги читателем.
Логические о2о-, o2m-, history-поля не хранятся в таблице, в отличие от физических полей, а лишь расширяют данную таблицу.