Универсальная даталогическая модель данных: многомерные ассоциативные массивы
Invite pending
Предлагаю Вашему вниманию универсальный вариант даталогической модели данных (логические взаимосвязи между элементами данных безотносительно их содержания и физической организации), который при определенных правилах преобразования возможно отобразить на максимально широкий класс инфологических моделей данных предметной области(модель сущность-связь).
В качестве такой даталогической модели данных предлагаю использовать — многомерные ассоциативные массивы.
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);
В качестве такой даталогической модели данных предлагаю использовать — многомерные ассоциативные массивы.
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);