Добавление или удаление индексированных полей
Индексированные поля используются для оптимизации поиска в базе данных. Они определяются как ограничение для связанного столбца в таблице базы данных. Поддерживаются как отдельные, так и составные индексы.
Добавление индексированного поля
Чтобы добавить индексированное поле в существующую таблицу базы данных, выполните следующие действия.
1. Создайте новый компоновочный блок, который расширяется из компоновочного блока PTC, содержащего диспетчер для сущности, связанной с таблицей базы данных. Эти диспетчеры указаны в таблице DefaultGlobalManagerConfiguration на странице Конфигурации вещи PTC.Base.Manager. Например, чтобы добавить индексированный ключ для порядка работы, перейдите в вещь PTC.JobOrderImpl.Manager.
Дополнительные сведения см. в разделе Создание нового компоновочного блока.
2. Перейдите к шаблону вещи диспетчера для нового компоновочного блока.
3. В разделе Сервисы найдите и переопределите сервис GetDBInfo для сущности к которой добавляется индексированное поле. Например, чтобы добавить индексированное поле в таблицу базы данных для порядков работы, необходимо найти и переопределить сервис GetJobOrderDBInfo.
4. В редакторе сценариев прокрутите вниз до записи профиля данных, в который необходимо добавить индексированное поле.
5. Добавьте массив indexedFields для профиля данных со свойствами, указанными ниже.
unique: укажите, если у столбца должно быть уникальное значение.
fieldnames: массив, в котором содержатся названия столбцов. Если указан только один столбец, создается один индекс. Если указано несколько столбцов, создается составной индекс.
* 
Один индекс можно создать, указав для name отдельное значение, которое является именем столбца, вместо того, чтобы указывать отдельное значение для fieldnames. Если указаны name и fieldnames, то name игнорируется, и индекс создается с использованием значений fieldnames.
identifier: наименование сущности в базе данных. Если значение не указано, то система автоматически создает его в формате <имя_таблицы>_<имя_столбца1>_<имя_столбца2>_<имя_столбцаN>_idx. Указанное значение должно быть уникальным в рамках указанных и созданных автоматически значений. Значение не должно превышать максимальную длину, разрешенную для идентификаторов базы данных.
6. Нажмите Сохранить, чтобы сохранить изменения для сервиса.
7. Перейдите к вещи PTC.DBConnection.Manager.
8. Синхронизируйте информацию базы данных со схемой базы данных. Дополнительные сведения см. в разделе Синхронизация информации и схемы базы данных.
Удаление индексированного поля
Чтобы удалить индексированное поле, выполните следующие действия.
* 
Не удаляйте индексированные поля, определенные по умолчанию. Удалите только добавленные ранее индексированные поля, например: Добавление пользовательских свойств в сущности модели данных или Добавление пользовательских сущностей в модель данных.
1. Создайте новый компоновочный блок, который расширяется из компоновочного блока PTC, содержащего диспетчер для сущности, связанной с таблицей базы данных. Эти диспетчеры указаны в таблице DefaultGlobalManagerConfiguration на странице Конфигурации вещи PTC.Base.Manager. Например, чтобы удалить индексированное поле из порядка работы, перейдите в вещьPTC.JobOrderImpl.Manager.
Дополнительные сведения см. в разделе Создание нового компоновочного блока.
2. Перейдите к вещи базы данных, настроенной для вашей системы, например, PTC.DBConnection.MSSQLDatabase.
3. В разделе Службы выполните сервис RemoveIndex со следующими входными данными:
dataShapeName: профиль данных таблицы базы данных, из которого удаляется ограничение для индексированного поля. Обязательно.
fieldName: поле в профиле данных, из которого удаляется ограничение индексированного поля. Ввод является обязательным только при удалении отдельного индексированного поля.
dbInfo: описание JSON удаляемого ограничения индексированного поля. Необходимо предоставить такую же информацию о identifier (при наличии) и name, указанную в службе GetDBInfo, в которой определено индексированное поле. Ввод является обязательным при удалении составного индекса.
4. Щелкните Выполнить.
5. Перейдите к определяющей индексированное поле службе GetDBInfo и удалите определение индексированного поля из служб. Если удаление не выполнено, то индексированное поле добавляется обратно в базу данных при запуске служб синхронизации.
Например, для удаления ограничения индексированного поля в том случае, если не указан identifier в поле с именем WorkDefinitionUID в профиле данных MyObject, укажите следующие входные параметры:
dataShapeNameMyObject
fieldNameWorkDefinitionUID
dbInfo
{
"identifier":"myobject_workdefinitionuid_idx"
"name":"WorkDefinitionUID",
}
Было ли это полезно?