ОСОБЕННОСТИ ХРАНЕНИЯ ИЗОБРАЖЕНИЙ В РЕЛЯЦИОННЫХ СУБД - Студенческий научный форум

XI Международная студенческая научная конференция Студенческий научный форум - 2019

ОСОБЕННОСТИ ХРАНЕНИЯ ИЗОБРАЖЕНИЙ В РЕЛЯЦИОННЫХ СУБД

Одиноков Д.А. 1, Артюшина Е.А. 1
1ПензГТУ, ФАИТ, магистратура
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Целью научно-исследовательской работы является освоение технологий хранения изображений в реляционных СУБД. К задачам, решенным в ходе исследования, относятся: 1) изучение особенностей хранения изображений в традиционных СУБД с различной архитектурой; 2) выбор инструментальных средств для разработки базы данных; 3) проектирование логической модели данных в выбранном формате [1]; 4) создание тестового приложения для хранения изображений в IDE MS Visual Studio 2017 (язык C#).

Логическая структура БД туристического агентства представлена на рис.1:

Рисунок 1 – Диаграмма БД «Туристическое агентство»

Реляционные СУБД разнообразной архитектуры предусматривают множество вариантов хранения графической информации. Так, например, в таблицах файл-серверной СУБД Microsoft Access нетекстовая информация (фото, графики и диаграммы, формулы, рисунки и пр.) содержится в полях-контейнерах OLE.

Поле объекта OLE (Object Linking and Embedding) является средством, позволяющим установить связь с объектами другого приложения или внедрить нетекстовый объект в базу данных. В соответствии с этой технологией внедренным или связанным OLE-объектом является документ или его фрагмент, созданный с помощью другого приложения, поддерживающий формат документа-источника, а также информацию об OLE-сервере. Внедренный OLE- объект может сохраняться непосредственно в файле базы данных. Для обработки подобных полей в SQL-клиенте, который спроектирован, например, с помощью IDE Embarcadero Delphi, можно использовать компонент OleContainer. Он принимает объект OLE, который загружается из графического файла стандартным методом CreateObjectFromFile. Используя этот контейнер, можно отобразить в клиентском приложении любую фотографию, которая хранится в базе данных в поле OLE.

Популярная ныне СУБД SQLite со встраиваемой архитектурой не рассчитана на коллективное использование в сети и может поставляться как составная часть IDE, например, Android Studio. Наиболее часто СУБД SQLite используется в мобильных приложениях для локального хранения данных клиента, в том числе – изображений различных форматов. Для этого служат поля специфического типа BLOB (Binary Large O

bject
).

Рисунок 2 – Конструктор таблицы Test в администраторе DB Browser for SQLite

Как видно из рис.2, среда администрирования DB browser for SQLite имеет универсальные встроенные средства для просмотра двоичных объектов BLOB. Однако при проектировании любого, даже элементарного Android-приложения для работы с БД программисту придется самостоятельно обеспечивать доступ к изображениям, хранящимся в локальной базе. Это возможно сделать с помощью метода execSQL, который поддерживает выполнение обычных SQL-запросов на манипулирование данными, либо используя стандартные библиотеки, к примеру - метод getBlob класса Cursor.

В клиент-серверной реляционной СУБД Microsoft SQL Server также имеются различные возможности для сохранения изображений. Можно хранить фотографии непосредственно в базе, используя для этого подходящий системный тип (например, image). Или же можно хранить в БД лишь ссылки на изображения (filestream), которые, в свою очередь, будут располагаться в заданных каталогах файловой системы компьютера-сервера.

В настоящем исследовании было принято решение выбрать для разработки первый вариант, так как использовать тип filestream рекомендуется при среднем объеме файлов свыше 1 Мб, а в нашем случае изображения приемлемого качества имеют средний объём 100 Кб [2]. Изображения будут храниться в бинарном коде в ячейках таблицы с типом image. Для апробации предлагаемого способа обработки изображений в СУБД MS SQL Server 2008 R2 Express Edition была создана тестовая таблица report [3,4].

К
онструктор таблицы представлен ниже на рис. 3.

Рисунок 3 – Конструктор тестовой таблицы report

Чтобы обеспечить загрузку в базу данных изображений, например, с локального диска компьютера и, наоборот, получить это изображение из базы, использована интегрированная среда разработки программ Microsoft Visual Studio 2017. Для этого на объектно-ориентированном языке C# [5] было реализовано два метода, для загрузки и получения изображений из БД, соответственно.

Т
ак, в методе PutImageBinaryInDb, который используется для записи изображения в БД, содержатся операторы для преобразования исходного изображения в бинарный код и получения расширения файла. Расширение необходимо, чтобы в дальнейшем можно было бы работать с изображениями разных форматов. Код метода представлен ниже на рис.4.

Рисунок 4 – Конвертация файла изображения в бинарный код

Далее в этом же методе связываемся с локальной базой данных и записываем изображение в текущую строку таблицы report, соответствующий фрагмент кода представлен далее на рис. 5.

Рисунок 5 – Загрузка изображения в БД MS SQL Server

П
омещаем вызов метода PutImageBinaryInDb в тело главного метода Main, запускаем тестовое приложение на C# и в результате его выполнения получаем новую запись в таблице report, представленную на рис. 6.

Рисунок 6 – Результат загрузки бинарного кода изображения в таблицу report

Для обратного процесса получения изображения из базы данных будем использовать метод GetImageBinaryFromDb (рис. 7).

Рисунок 7 – Получение из БД строки с изображением и его форматом

В приведенном выше фрагменте кода подключаемся к базе данных и создаем запрос на выборку SELECT, возвращающий из таблицы report запись со значением уникального поля id = 1. Полученный из БД двоичный код помещаем в целочисленный массив для последующей обработки.

Далее конвертируем бинарный код обратно в изображение и сохраняем файл на диск, программный код приведен на рис. 8.

Рисунок 8 – Конвертация и сохранение изображения на диск

П
ри вызове метода GetImageBinaryFromDb из точки входа Main тестовой программы, изображение успешно сохраняется в заданном каталоге images на локальном диске D:\ в файле result_new.jpg, как это показано ниже на рис. 9.

Рисунок 9 – Файл с изображением, полученным из БД

Таким образом, на основе вышеизложенного материала можно сделать вывод, что для хранения графической информации в данной работе вполне может быть использован тип image, входящий в набор системных типов реляционной клиент-серверной СУБД Microsoft SQL Server 2008 R2 Express Edition при условии соблюдения ограничений на средний объем изображений до 1 Мб.

Список литературы

1. Дейт, К.Дж. Введение в системы баз данных. 6-е изд. – К.;М.,СПб.:«Вильямс», 2015.–848с.

2 Оти М. Типы данных для больших объектов в SQL Server. [Электронный ресурс]: URL: https://www.osp.ru/winitpro/2011/01/13008224 (дата обращения: 05.02.2019).

3. Артюшина Е.А. Использование облачных технологий при изучении СУБД MS SQL Server/ Е.И. Маркин, К.М.Рябова, Е.А.Артюшина // Современные методы и средства обработки пространственно-временных сигналов: Сборник статей XIV Всероссийской научно-технической конференции. – Пенза: ПДЗ, 2016. – С. 89-94.

4. Артюшина Е.А. Проблемы использования облачных технологий при изучении MS SQL Server/ С.А. Жулев, А.Е. Ведюшкина, Е.А.Артюшина //Международный студенческий научный вестник: Электронный научный журнал: Изд-во: ООО "Информационно-технический отдел Академии Естествознания" (Пенза), 2015.- №3(2) – С.271.

5. С. Гринштейн Историяязыковпрограммирования: C# впередипланетывсей. [Электронный ресурс]: URL: https://habr.com/ru/post/313694/(дата обращения: 05.02.2019).

Просмотров работы: 132