Перенос конфигурации приложения из реестра Windows в SQLite - PullRequest
0 голосов
/ 27 апреля 2010

В настоящее время я работаю над миграцией, упомянутой в строке заголовка. Проблема в том, что конфигурация приложения, которая хранится в реестре, имеет древовидную структуру, например:

X
|->Y
   |->Z
      |->SomeKey someValue
W
|->AnotherKey anotherValue

и так далее.

Как я могу смоделировать эту структуру в SQLite (или любой другой БД)? Если у вас есть опыт в подобных проблемах, пожалуйста, присылайте сообщения. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Барис, эта структура похожа на структуру каталогов / файлов. Это можно смоделировать с помощью простого родительского <> дочернего отношения в каталогах и пар ключ-значение, относящихся к каталогу.

Что-то вроде

Directory:
id integer auto_increment;
name string not null;
parent_id integer not null default 0;

Property:
id integer auto_increment;
key string;
value string;
directory_id integer not null;

При этом вы можете обращаться к корневым каталогам, ищущим каталоги с parent_id = 0, дочерним каталогам, просматривая WHERE parent_id = someid и для свойств, которые ищут directory_id = someid.

Надеюсь, это поможет:)

0 голосов
/ 27 апреля 2010

Таблицы с собственными ссылками, упомянутые в предыдущих постерах, хороши, когда вы хотите сохранить иерархию, они становятся менее привлекательными, когда вы начинаете выбирать листья дерева.

  1. Не могли бы вы уточнить вариант использования для извлечения данных из конфигурации?

  2. Собираетесь ли вы загрузить всю конфигурацию сразу или получить каждый параметр отдельно?

  3. Насколько произвольной будет глубина листовых узлов?

0 голосов
/ 27 апреля 2010

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

Одним из способов обхода клона реестра является использование пути к ключу реестра в качестве ключа. То есть, есть запись, где Path - «X / Y / Z / SomeKey», а Value - «someValue». Это упростит запрос, но может не отображать иерархию так, как вам хотелось бы. То есть у вас будут только значения, а не общая структура иерархии.

Суть в том, что вы должны пойти на компромисс, чтобы отобразить иерархию с неизвестным количеством уровней в структуре реляционной базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...