Простая база данных

Рейтинг: 0Ответов: 1Опубликовано: 15.03.2015

Дали в универе проект на лабе. Нужно сделать приложение, которое будет реализовывать простые возможности базы данных, с обслуживанием в консоли.

Требования:

  1. Данные, хранящиеся в текстовом файле (чтение и запись).
  2. Просмотр содержимого базы данных.
  3. Добавление записи в конец.
  4. Изменить выбранную запись, более-менее сложил представление. Но я решил для своих же навыков попробовать реализовать что-то более сложное: возможность работы CRUD sql команд, в их самом примитивном виде, и чтобы это работало соответственно через консоль. Приложение запустили, выбрали БД, ввели "sql команду". Но тут и проблемы, не особо понимаю как.
  5. Удалить выбранную запись.
  6. Поиск записи на основе заданных условий.
  7. Сортировка записи по выбранным условиям.

В принципе как реализовать подобное? Поэтому был бы благодарен за общую идею работы или толчок в виде ссылок.

Спасибо.

Ответы

▲ 1

Изменение записей можно сделать следующим образом (в принципе так делают в большинстве современных баз данных):

  • находим старую запись;
  • проверяем, хватает ли места, чтобы записать туда новую. Если да - пишем;
  • если нет, то помечаем запись как удаленную (да, для этого придется выделить один байт/бит) и добавляем запись в конец.

Поиск записей. Опять смотрим, как сделано у "больших баз". Если нет индекса для поля, просто просматриваем записи последовательно и выводим/запоминаем нужные. Если есть индекс, то смотрим его. Как может выглядеть индекст для числового поля - просто значение и номер строки, где оно встречается. Если поле уникальное, то просто обычное бинарное дерево. Как искать - понятно. Задали найти записи по нужному числу - просто взяли в индексе готовые номера строк и все.

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

Если хочется сделать "подноценный sql", тут придется писать парсер. А это может быть более сложная задача. Но можно просто ограничить себя минимальным синтаксисом, тогда будет сильно легче. К примеру, select получает только список полей и, возможно, одно условие для одного поля.

Если хочется посмотреть исходный код, то смотрите на sqlite. Он, правда, не на C#, а на C, но хорошо документирован и с тестами.