Pull to refresh

Универсальная даталогическая модель данных: многомерные ассоциативные массивы

Предлагаю Вашему вниманию универсальный вариант даталогической модели данных (логические взаимосвязи между элементами данных безотносительно их содержания и физической организации), который при определенных правилах преобразования возможно отобразить на максимально широкий класс инфологических моделей данных предметной области(модель сущность-связь).

В качестве такой даталогической модели данных предлагаю использовать — многомерные ассоциативные массивы.

I. Рассмотрим дерево элементов:

— Элемент 1
— — Элемент 1-1
— — — Элемент 1-1-1
— — — Элемент 1-1-2
— — Элемент 1-2
— Элемент 2
— — Элемент 2-1

II. Отображение в виде многомерного ассоциативного массива:

ARRAY[0][value] = Элемент 1
ARRAY[0][0][value] = Элемент 1-1
ARRAY[0][0][0][value] = Элемент 1-1-1
ARRAY[0][0][1][value] = Элемент 1-1-2
ARRAY[0][1][value] = Элемент 1-2
ARRAY[1][value] = Элемент 2
ARRAY[1][0][value] = Элемент 2-1

III. Отбражение многомерного ассоциативного массива в реляционную базу данных:

Создаем таблицу для корневых элементов дерева и помещаем туда корневые элементы.
Для каждого элемента имеющего отличное от нуля число детей, создаем отдельную таблицу тождественную по структуре родительской таблице и заполняем ее. Рекурсивно создаем всю структуру.
В названии таблиц следует использовать индексные ключи массива соответствующие первичным ключам таблиц вида: array_ID родителя уровня 0_ID родителя уровня 1_ID родителя уровня 2…

Описание полей таблиц:
1)`id`- Идентификатор целочисленный уникальный элемента данных. Используется в качестве индекса исходного массива.
2) `level`- Уровень вложенности элемента данных. Для корневых элементов дерева level=0
3) `children` — Количество детей элемента данных
4) `integer`- Значение целочисленное элемента данных. В данное поле записывается значение [value] массива при совпадении типа данных.
5) `string`- Значение строковое элемента данных. В данное поле записывается значение [value] массива при совпадении типа данных.
6) `text`- Значение текстовое элемента данных.
7) `float`- Значение с плавающей запятой элемента данных. В данное поле записывается значение [value] массива при совпадении типа данных.

--ДАМП ТАБЛИЦ ARRAY для MySQL 5

CREATE TABLE IF NOT EXISTS `array` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор целочисленный уникальный элемента данных',
`uin` varchar(255) DEFAULT NULL COMMENT 'Идентификатор строковый уникальный элемента данных',
`level` int(10) NOT NULL DEFAULT '0' COMMENT 'Уровень вложенности элемента данных',
`children` int(10) NOT NULL DEFAULT '0' COMMENT 'Количество детей элемента данных',
`integer` int(10) DEFAULT NULL COMMENT 'Значение целочисленное элемента данных',
`string` varchar(255) DEFAULT NULL COMMENT 'Значение строковое элемента данных',
`text` text COMMENT 'Значение текстовое элемента данных',
`float` double DEFAULT NULL COMMENT 'Значение с плавающей запятой элемента данных',
PRIMARY KEY (`id`),
UNIQUE KEY `uin` (`uin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Таблица элементов данных' AUTO_INCREMENT=3;

INSERT INTO `array` (`id`, `uin`, `level`, `children`, `integer`, `string`, `text`, `float`) VALUES
(1, 'Элемент 1', 0, 2, NULL, NULL, NULL, NULL),
(2, 'Элемент 2', 0, 2, NULL, NULL, NULL, NULL);

CREATE TABLE IF NOT EXISTS `array_1` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор целочисленный уникальный элемента данных',
`uin` varchar(255) DEFAULT NULL COMMENT 'Идентификатор строковый уникальный элемента данных',
`level` int(10) NOT NULL DEFAULT '0' COMMENT 'Уровень вложенности элемента данных',
`children` int(10) NOT NULL DEFAULT '0' COMMENT 'Количество детей элемента данных',
`integer` int(10) DEFAULT NULL COMMENT 'Значение целочисленное элемента данных',
`string` varchar(255) DEFAULT NULL COMMENT 'Значение строковое элемента данных',
`text` text COMMENT 'Значение текстовое элемента данных',
`float` double DEFAULT NULL COMMENT 'Значение с плавающей запятой элемента данных',
PRIMARY KEY (`id`),
UNIQUE KEY `uin` (`uin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Таблица элементов данных' AUTO_INCREMENT=3;

INSERT INTO `array_1` (`id`, `uin`, `level`, `children`, `integer`, `string`, `text`, `float`) VALUES
(1, 'Элемент 1-1', 1, 2, NULL, NULL, NULL, NULL),
(2, 'Элемент 1-2', 1, 0, NULL, NULL, NULL, NULL);

CREATE TABLE IF NOT EXISTS `array_1_1` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор целочисленный уникальный элемента данных',
`uin` varchar(255) DEFAULT NULL COMMENT 'Идентификатор строковый уникальный элемента данных',
`level` int(10) NOT NULL DEFAULT '0' COMMENT 'Уровень вложенности элемента данных',
`children` int(10) NOT NULL DEFAULT '0' COMMENT 'Количество детей элемента данных',
`integer` int(10) DEFAULT NULL COMMENT 'Значение целочисленное элемента данных',
`string` varchar(255) DEFAULT NULL COMMENT 'Значение строковое элемента данных',
`text` text COMMENT 'Значение текстовое элемента данных',
`float` double DEFAULT NULL COMMENT 'Значение с плавающей запятой элемента данных',
PRIMARY KEY (`id`),
UNIQUE KEY `uin` (`uin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Таблица элементов данных' AUTO_INCREMENT=3;

INSERT INTO `array_1_1` (`id`, `uin`, `level`, `children`, `integer`, `string`, `text`, `float`) VALUES
(1, 'Элемент 1-1-1', 1, 0, NULL, NULL, NULL, NULL),
(2, 'Элемент 1-1-2', 1, 0, NULL, NULL, NULL, NULL);

CREATE TABLE IF NOT EXISTS `array_2` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор целочисленный уникальный элемента данных',
`uin` varchar(255) DEFAULT NULL COMMENT 'Идентификатор строковый уникальный элемента данных',
`level` int(10) NOT NULL DEFAULT '0' COMMENT 'Уровень вложенности элемента данных',
`children` int(10) NOT NULL DEFAULT '0' COMMENT 'Количество детей элемента данных',
`integer` int(10) DEFAULT NULL COMMENT 'Значение целочисленное элемента данных',
`string` varchar(255) DEFAULT NULL COMMENT 'Значение строковое элемента данных',
`text` text COMMENT 'Значение текстовое элемента данных',
`float` double DEFAULT NULL COMMENT 'Значение с плавающей запятой элемента данных',
PRIMARY KEY (`id`),
UNIQUE KEY `uin` (`uin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Таблица элементов данных' AUTO_INCREMENT=3;

INSERT INTO `array_2` (`id`, `uin`, `level`, `children`, `integer`, `string`, `text`, `float`) VALUES
(1, 'Элемент 2-1', 1, 0, NULL, NULL, NULL, NULL);
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.