Интеграция с базами данных
Структура базы данных Force Field спроектирована с учетом требований к быстрой интеграции практически с любым приложением.
Force Field оперирует внутренним представлением защищенных объектов, поэтому на основе БД приложения формируется специальная структура, c которой и работает “Force-Field”.
Интеграция осуществляется посредством создания двух view – FF_Object и FF_Person.
База данных приложения может содержать множество таблиц, представляющих объекты, каждая из которых обладает целочисленным идентификатором (int). На основе структуры базы данных приложения формируется FF_Object c полями: object_id, owner, class, parent, используемый Force Field для внутреннего представления объектов.
В базе данных приложения может использоваться единая нумерация объектов. В случае если каждый объект не обладает идентификатором (ID), уникальным в пределах системы, он может быть сгенерирован. Рассмотрим один из способов генерации идентификатора.
Для того, чтобы гарантированно избежать повтора идентификаторов при помещении в FF_Object объектов из нескольких таблиц, можно использовать сдвиг идентификатора на один разряд. Каждая таблица БД считается отдельным типом объекта. Каждая запись в таблице считается отдельным объектом, который помещается в FF_Object. Таким образом, в сгенерированном идентификаторе (object_id) правая часть указывает на номер, соответствующий типу объекта, а левая – на идентификатор, который имеет отдельная запись в конкретной таблице БД приложения.
Например, для хранения информации о товарах в приложении используется таблица “Manufacturers”, в которой находится информация о производителях оборудования. С ней связаны еще две таблицы: “Monitors” и “Printers”.
Тогда если идентификатору (ID) корневого элемента (root) присвоить значение 1, то ID объектов из таблицы “Manufacturers” будут равны соответственно 11, 21, 31 и т. д. При этом последняя цифра указывает на тип объекта, а первая – на идентификаторы записей, содержащихся в таблице “Manufacturers”.
Объекты из таблицы “Printers” в FF_Object – это объекты с номером типа, равным 2. При размещении в FF_Object объектов из таблицы “Printers” они получат ID 12, 22, 32, 42 и т. д.
Объекты из таблицы “ Monitors в FF_Object – это объекты с номером типа, равным 3. При размещении в FF_Object объектов из таблицы “Monitors” они получат ID 13, 23, 33, 43 и т. д.
Такой способ генерации идентификационного номера для view FF_Object позволяет избежать возможных повторений.
Чтобы связать реальную структуру БД, использующей идентификатор другого типа (не int), c внутренним представлением, которым оперирует “Force-Field”, будут необходимы дополнительные трансформации. Например, может понадобиться промежуточная таблица.