Как создать таблицы базы данных в C - PullRequest
0 голосов
/ 09 октября 2011

Мне нужно написать маленькое / простое приложение базы данных, используя C, для моей степени CS (поэтому использование SQLite или любого другого доступного приложения не вариант. Другими словами, мне нужно заново изобрести колесо здесь).

Моя идея состоит в том, чтобы использовать B-дерево для хранения предметов каждой таблицы. Проблема, с которой я сталкиваюсь, заключается в том, что таблицы должны быть гибкими, чтобы содержать неизвестное количество столбцов, и каждый столбец может быть либо STRING, либо INT. Например, с помощью этой команды:

CREATE TABLE student (STRING name, INT age)

Мне нужно создать таблицу, содержащую строку и целое число. Вместо этого с помощью этой команды:

CREATE TABLE grade (INT grade1, INT grade2, INT grade3)

Мне нужно создать таблицу, содержащую три целых числа.

Как можно добиться такой гибкости?

Пока моя единственная идея - создать структуру с несколькими объединениями внутри, где каждый союз может быть либо STRING, либо INT. Я также должен был бы поместить много союзов внутрь, чтобы быть уверенным в том, чтобы вместить все столбцы, запрошенные таблицей. Например:

struct table{
    union{
        int number;
        char *text;
    }column1;

    union{
        int number;
        char *text;
    }column2;

    union{
        int number;
        char *text;
    }column3;

    ....

};

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 09 октября 2011

Я могу думать только о двух очень разных подходах:

  1. создать «компилятор схемы», который получает определение таблицы, записывает struct s и компилирует ядро ​​базы данных.
  2. из определения схемы вычисляем смещение байта и длину каждого столбца.сохраните и восстановите записи в виде байтового массива и выберите поля, используя этот список смещения / длины.

Наиболее распространенным является # 2, но преимущество # 1 в том, что компилятор C "знает" таблицуструктура, и будет проверять ваши столбцы.

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