Базы данных играют огромную роль в работе разработчика приложений. Они необходимы для хранения и анализа различной информации [1–3].
Наиболее интересными случаями применения базы данных являются хранение и использование объектов. В данной статье будет представлено создание и использование объектов в базе данных Oracle на примере геометрической фигуры (треугольника). Для данного объекта будут выполнены следующие операции:
? построение таблицы для хранения типа Треугольник;
? создание дополнительной таблицы для хранения таблицы, хранящей объекты типа Треугольник;
? создание столбца-ссылки на объекты дополнительной таблицы.
Цель данной статьи – создать базу данных, хранящую информацию о рассматриваемом типе данных (треугольнике), провести работу с созданной БД в соответствии с заданием, представленным в разделе «Описание проектируемой базы данных».
Материалы и методы исследования
В качестве материала исследования выступает база данных Oracle.
В статье используется эмпирический метод исследования, поскольку основной источник результатов – анализ.
Результаты исследования и их обсуждение
Описание проектируемой базы данных
Треугольник в трехмерном пространстве с осями X, Y, Z, заданный координатами вершин. Для вершины (точки в пространстве) определяется объектный тип с тремя числовыми атрибутами – координатами. Для треугольников задается свой тип с тремя атрибутами – вершинами и методом, вычисляющим наибольшее расстояние точки, находящейся на треугольнике от плоскости X-O-Y.
Задание
1. Построить в БД новую таблицу с полем-объектом, для хранения геометрических фигур. Столбцы таблицы содержат: идентификатор фигуры – целое (первичный ключ), название фигуры – строка до 30 символов, объект – геометрическая фигура из варианта задания. Загрузить 3-4 строки таблицы данными. С помощью запросов вывести атрибуты и результаты выполнения методов для каждого объекта таблицы.
2. Создать отдельную (вторую) таблицу со строками-объектами и заполнить ее объектами из первой таблицы. Вывести атрибуты и результаты выполнения методов для каждого объекта созданной таблицы.
3. В первую таблицу добавить столбец-ссылку на объекты второй таблицы и занести в его некоторые поля ссылку на соответствующий объект второй таблицы. Пользуясь ссылками, вывести значение любого атрибута и результат выполнения метода для соответствующего объекта второй таблицы.
Создание типов Точка и Треугольник
Для работы с описанной базой данных необходимо создание двух типов объекта: Точка и Треугольник. Ниже представлено создание типа Точка (POINT, хранит координаты) и Треугольник (TRIANGLE, хранит вершины типа Точка), имеющего метод max_distance_from_plane (максимальное расстояние от плоскости XOY) [4–6].
--Создание типа Точка
CREATE OR REPLACE TYPE POINT AS OBJECT (
x FLOAT,
y FLOAT,
z BLOAT
);
--Создание типа Треугольник
CREATE OR REPLACE TYPE TRIANGLE AS OBJECT (
A POINT,
B POINT,
C POINT,
--Функция для определения максимального расстояния от треугольника до плоскости XOY
MEMBER FUNCTION max_distance_from_plane(t TRIANGLE) RETURN FLOAT
);
/
CREATE OR REPLACE TYPE BODY TRIANGLE AS MEMBER FUNCTION max_distance_from_plane(t TRIANGLE) RETURN FLOAT IS
BEGIN
IF(ABS(t.A.z) >= ABS(t.B.z) AND ABS(t.A.z) >= ABS(t.C.z)) THEN
RETURN ABS(t.A.z);
ELSE IF(ABS(t.B.Z) >= ABS(t.A.z) AND ABS(t.B.z) >= ABS(t.C.z)) THEN
RETURN ABS(t.B.z);
ELSE
RETURN ABS(t.C.z);
END IF;
END IF;
END;
END;
Наибольшим расстоянием от плоскости X-O-Y до треугольника является вершина треугольника с наибольшим по модулю значением координаты z.
Использование объектов
Построение таблицы для хранения геометрических фигур
Для хранения данных о треугольниках создана таблица Figures. Данная таблица содержит следующие атрибуты:
? id (ID треугольника) имеет тип Number (число), является первичным ключом таблицы;
? name (название треугольника) имеет тип VARCHAR2 (строка);
? object (хранит данные о вершинах треугольника) имеет тип Triangle (треугольник).
Ниже представлено создание таблицы Figures (с помощью команды CREATE TABLE), хранящей данные о геометрических фигурах [7–9].
--Создание таблицы Фигуры
CREATE TABLE FIGURES (
id NUMBER(10) NOT NULL,
name VARCHAR2 (30) NOT NULL,
object TRIANGLE NOT NULL,
CONSTRAINT pk_id PRIMARY KEY (id)
);
Вставка в таблицу Figures 3 строк с помощью команды INSERT INTO представлена ниже.
--Вставка строк в таблицу
INSERT INTO FIGURES(id, name, object)
SELECT 1, 'Треугольник № 1', TRIANGLE(POINT(1, 1, 1), POINT(1, 3, 1), POINT(1, 2, 3)) FROM DUAL
UNION ALL
SELECT 2, 'Треугольник № 2', TRIANGLE(POINT(2, 2, 2), POINT(2, 6, 2), POINT(2, 4, 6)) FROM DUAL
UNION ALL
SELECT 3, 'Треугольник № 3', TRIANGLE(POINT(3, 3, 3), POINT(3, 9, 3), POINT(3, 6, 9)) FROM DUAL;
Выведем значения атрибутов и вычисленное для каждого треугольника максимальное расстояние до плоскости XOY.
SELECT
f.id "ID", f.name "Название фигуры",
f.object.A "Вершина A", f.object.B "Вершина B", f.object.C "Вершина C",
f.object.max_distance_from_plane(f.object) "Максимальное расстояние от плоскости XOY"
FROM FIGURES f;
Результат запроса изображен на рис. 1.
Рис. 1. Результат запроса
Создание дополнительной таблицы
Создание (команда CREATE TABLE) дополнительной таблицы NewFigures (данная таблица имеет такие же атрибуты (id, name и object)), содержащей объекты из первой таблицы, представлено ниже [10].
--Создание дополнительной таблицы
CREATE TABLE NEWFIGURES OF TRIANGLE;
Заполнение (команда INSERT INTO) таблицы NewFigures выполнено с помощью кода, представленного ниже.
--Заполнение таблицы
INSERT INTO NEWFIGURES SELECT f.object FROM FIGURES f;
SELECT
f.A "Вершина A", f.B "Вершина B", f.C "Вершина C",
f.max_distance_from_plane (TRIANGLE(f.A, f.B, f.C)) "Максимальное расстояние от плоскости XOY"
FROM NEWFIGURES f;
Данные созданной таблицы представлены на рис. 2.
Рис. 2. Данные таблицы
Создание столбца-ссылки
Добавление столбца-ссылки на объекты дополнительной таблицы (с помощью команда ALTER TABLE и UPDATE) представлено ниже [11].
--Добавление ссылки на дополнительный столбец
ALTER TABLE FIGURES ADD (
newfigures_ref REF TRIANGLE
);
--Обновление таблицы
UPDATE FIGURES f SET f.newfigures_ref = (
SELECT REF(newf) FROM NEWFIGURES newf
WHERE f.object.A.x = newf.A.x AND f.object.A.y = newf.A.y AND f.object.A.z = newf.A.z
AND f.object.B.x = newf.B.x AND f.object.B.y = newf.B.y AND f.object.B.z = newf.B.z
AND f.object.C.x = newf.C.x AND f.object.C.y = newf.C.y AND f.object.C.z = newf.C.z
);
Запрос данных через функцию deref() представлен ниже.
SELECT
f.id "ID", f.name "Название фигуры",
deref(f.newfigures_ref).A "Вершина A",
deref (f.newfigures_ref).B "Вершина B",
deref (f.newfigures_ref).C "Вершина C",
deref (f.newFigures_ref).max_distance_from_plane(TRIANGLE(
deref (f.newfigures_ref).A, deref(f.newfigures_ref).B, deref(f.newfigures_ref) .C))
"Максимальное расстояние от плоскости XOY"
FROM FIGURES f;
Результат запроса изображен на рис. 3.
Рис. 3. Результат запроса
В данной статье представлено создание и использование объектов в базе данных Oracle. В качестве хранимого объекта выступает треугольник. Для работы с базой данных, в первую очередь, были созданы типы данных Точка (хранит координаты) и Треугольник (хранит вершины треугольника и метод, определяющий максимальное расстояние от плоскости X-O-Y до треугольника).
На основе созданных типов данных получены следующие результаты.
? Определена таблица Figures (содержит атрибуты id (ID треугольника, также является первичным ключом таблицы), name (название треугольника) и object (содержит данные о вершинах треугольника)), хранящая данные о треугольниках.
? Создана таблица NewFigures, хранящая объекты из первой таблицы.
? Определен столбец-ссылка на объекты таблицы NewFigures. Выполнен запрос данных через функции. deref().
Заключение
Основное отличие объектов от обычных данных заключается в том, что объекты содержат в себе несколько полей. Однако создание и использование объектов практически не отличается от создания и использования обычной информации в базах данных, поскольку в одном и другом случае используются одинаковые команды (такие как CREATE, ALTER и пр.), что и представлено в данной статье на примере типа данных Треугольник.