Обратите внимание, что этот вопрос касается только C++ . Меня не интересуют существующие библиотеки баз данных, и я не ищу универсального решения для «баз данных в C++». У меня есть конкретный вопрос, и я после самого эффективного (с точки зрения времени, пространства и лучшей практики) решения проблемы ниже.Как реализовать простую реляционную базу данных?
Предположим, у меня есть серия книг, описанных Id
, ISBN
, Author
и Name
. Столбец Name
будет идентификатором, который относится к отдельной таблице авторов, содержащей столбцы Id
, Surname
, First Name
. Я хочу иметь возможность эффективно поиск по имени, а также по автору. Как я могу это структурировать и какие контейнеры использовать?
Эта тема была поднята несколько раз на SO и elsewhere, но никогда с ответом, относящимся конкретно к C++ или к реализации, не использующей существующие библиотеки.
Наивное решение было бы просто создать 2 отдельных классы: Author
и Book
:
class Book
{
public:
int id;
std::string isbn;
Author* author;
std::string name;
};
class Author
{
public:
int id;
std::string surname;
std::string givenName;
};
я мог бы создать векторы книги и автор (указатели). Но как бы я мог эффективно проиндексировать их? Предположим, я хочу найти книгу по ее ISBN; как я могу это сделать в постоянном или, по крайней мере, логарифмическом времени? Это возможно? Существует ли стандартная практика для такого рода проблем?
Этот, где я хочу, был упреждающим «голосованием против закрытия». Это вполне разумный вопрос, который полностью отвечает. Хотя нет абсолютного ответа, существует разумная фактическая поддержка выбора между возможностями, а не только мнениями. –
Это очень общий вопрос, и любой хороший ответ был бы довольно общим - не специфичным для C++. Это предполагает, что вам нужна реальная, достаточно большая и надежная БД, а просто набор хеш-карт. –
@HotLicks Я хочу решение, которое эффективно позволяет мне сортировать или индексировать любой член «Книги» или «Автор», используя C++ для потенциально большого количества этих элементов. – arman