Как преобразовать структуру C ++ в базу данных - PullRequest
1 голос
/ 29 марта 2011

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

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

Допустим, у меня есть следующая структура:

typedef struct StructUser {
    BYTE readAccess;    
    BYTE writeAccess;
    BYTE passLength;
    BYTE nameLength;
    char pass[32];  
    char name[32];
}

Как бы вы создали базу данных для обеспечения максимальной гибкости (добавление или удаление некоторыхэлементов) и лучшую производительность (быстрый выбор конфигурации)?

Сначала я подумал о таблице на структуру со многими столбцами в качестве элементов в структуре, но, кажется, ее не очень просто поддерживать.

Спасибо

1 Ответ

3 голосов
/ 29 марта 2011

Есть несколько вещей, которые нужно учитывать.

Прежде всего, вы хотите, чтобы ваша база данных имела читабельную структуру или нет?Или вы можете жить с довольно нечитаемыми данными в базе данных, но лучше подходящими для сопоставления с вашей структурой?

  • Если вы хотите, чтобы структура базы данных была читаемой (желательно в 3-й или 4-й нормальной форме), укажите свою базу данных.столбцы таблиц, которые соответствуют логическим полям в вашей структуре.Во многих случаях это означает один столбец на поле структуры, но в некоторых случаях вам может потребоваться отобразить несколько полей в один столбец или разбить одно поле на несколько столбцов.Рассмотрите возможность использования инструмента ORM (Object-Relational Mapping), чтобы помочь вам в этом (например, для Java у вас есть Hibernate, для C / C ++, вероятно, есть подобные инструменты).
  • Если вы можете жить с нечитаемыми данными в вашембазе данных, вы можете сериализовать вашу структуру в одну строку и сохранить эту строку в базе данных.При чтении из базы данных просто прочитайте строку и десериализуйте ее.Тогда вашим таблицам нужен только один столбец, который представляет собой сериализованную строку.

Хотя подход с использованием сериализованной строки может дать вам более быстрое начальное решение и может сделать его более удобным для изменения структуры без изменениябазы данных, вы, вероятно, столкнетесь с проблемами в долгосрочной перспективе.Наличие четкой структуры базы данных означает, что и другие инструменты могут использовать вашу базу данных (например, инструменты RAD, такие как Access).Поэтому рассмотрите возможность исследования с помощью инструмента ORM.

Во-вторых, вашему приложению, вероятно, также необходимо сохранить данные в базе данных.Но как вы собираетесь это сделать?

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

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

Переход от файла к базе данных может показаться вам простым, но это не так.Заранее подумайте, что вы хотите сделать со своей базой данных, и предусмотрите достаточно времени для разработки вашей базы данных и написания кода для доступа к базе данных.

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