Да, у вас может быть только struct Adress
, глобальный FILE *
, указывающий на файл базы данных, и глобальный struct Adress rows[MAX_ROWS]
для хранения данных. Однако у реальной базы данных есть имя, связанные файлы, разрешения и т. Д. c (приведенный вами пример очень прост).
Но вы можете изменить структуры, чтобы развить модель и помочь вам понять. Рассмотрим это, например:
struct Database {
char name[DB_NAME];
enum charset_list charset;
struct Address rows[MAX_ROWS];
}
Теперь он предоставляет вам больше информации о вашей базе данных (это имя и набор символов [utf8
, latin1
и т. Д.]), И все это содержится в одном и том же struct
(это сжато). Сравните это с моделью «глобальных переменных» ... что за беспорядок .
То же самое касается соединения.
struct Connection {
FILE *fp;
char request_db[DB_NAME];
char host[HOSTNAME];
char ip[IPV4_LEN];
struct User *user;
struct database *conn;
}
Здесь у вас есть версия который позволяет вам иметь файл index из нескольких файлов базы данных. Когда пользователь запрашивает соединение, функция просматривает индексную таблицу, получает имя базы данных и соответствующий файл, устанавливает указатель FILE *
и выполняет необходимые вызовы функций, чтобы вернуть пользователю рабочий conn
.