← на главную

Унифицированное хранение разнотипных данных

8 февраля 2008

Александр Супруненко

Александр Супруненко

Руководитель проекта / Системный архитектор

Задача хранения разнотипных данных в БД для дальнейшей их публикации средствами web и доступа к ним по протоколу HTTP(S) чаще всего решается в отдельности для каждого из типов данных: текст, графика, мультимедиа и т. д. с учётом структурной организации данных. Подобный подход имеет следующие недостатки: неоднородная структура БД, поддержка лишь некоторых описанных типов данных и, как следствие, затруднённая расширяемость системы хранения.

Предлагаемое решение позволяет хранить данные в унифицированной форме, обеспечивая единый метод доступа к данным всех типов. Для хранения данных используется механизм контейнеров. Контейнер представляет собой логическую единицу контента, обладающую рядом свойств, позволяющих однозначно идентифицировать данный контейнер (идентификатор), управлять временем публикации данных (даты и время ввода, изменения и публикации), структурировать данные (идентификаторы родительских контейнеров, приоритет), ограничивать доступ к данным (разрешения на чтение, изменение, добавление дочерних и удаление). Контейнер может хранить лишь текстовую информацию; для хранения данных различных типов контейнер может расширяться одним или несколькими параметрами. Каждый контейнер может иметь неограниченное число различных параметров. Каждый параметр в контейнере может принимать значение, определяемое типом данного параметра. Параметр может иметь один из нескольких типов: текст, графика, файл, дата, список, флажок и др. Типы параметров определяются возможностями HTML и представляют собой по большей части элементы форм ввода, графические элементы и ссылки. Таким образом, каждый контейнер может содержать одну или несколько порций однотипных или разнотипных данных, помещённых в параметры. Благодаря отсутствию строгой типизации самих контейнеров, доступ к данным, помещённым в параметры, осуществляется унифицировано на уровне каждого контейнера. Также, используя свойства контейнеров для структуризации данных, возможно создание древовидной структуры контейнеров, определяющей иерархию данных. Т. к. контейнер не зависит от типов данных, хранящихся в нём, данные могут быть с лёгкостью реорганизованы или реструктурированы без потери информации.

Физически контейнер представляет собой строку в таблице БД, в которой описываются только основные свойства контейнера: идентификатор, даты ввода, модификации и публикации, идентификаторы родительских контейнеров, приоритет, определяющий положение контейнера в дереве, разрешения на чтение, изменение, добавление дочерних контейнеров и удаление. Параметр также представляет собой строку таблицы, содержащей тип параметра и конфигурацию (например, элементы списка для параметров типа «список»). Связь контейнеров с параметрами определяется при помощи отдельной таблицы, содержащей идентификатор контейнера, к которому относится значение параметра, идентификатор параметра для определения его типа и значение параметра для данного контейнера. Таким образом, обеспечивается возможность связывания неограниченного множества различных параметров с каждым контейнером (связь много ко многим). Значения параметров типов данных, подразумевающих данные в виде файла, могут представлять собой текст, определяющий местоположение файла в файловой системе web-сервера, либо хранить непосредственно файл.

Представленное решение позволяет унифицировано хранить разнотипные данные и обеспечивать доступ к ним через web. При этом хранилище представляет собой БД, состав таблиц которой не зависит от множества типов данных. Достоинствами данного решения являются поддержка практически любого типа контента, использующегося для публикации на web, лёгкая расширяемость системы хранения, не требующая изменения структуры БД, а также возможность иерархического объединения и структурирования данных.

© 2005–2018 Система управления сайтом «Итари»

Контактная информацияПравовые аспектыКарта сайта