gpt4 book ai didi

c - Learn C the Hard Way 的 ex17 数据库设计问题

转载 作者:行者123 更新时间:2023-12-03 23:16:22 28 4
gpt4 key购买 nike

我真的被困在这个问题上了。 ex17 应该通过提供 simple database 来教我堆和堆栈内存分配。 (我的问题很具体,但我会把它留在那里以防万一您需要完整的代码)。关于数据库的某些设计决策的目的是什么,没有太多解释,这就是我寻求帮助的原因。

1) 必要性还是设计便利(约定)?

struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};

struct Database {
struct Address rows[MAX_ROWS];
};

struct Connection {
FILE *file;
struct Database *db;
};

我不确定为什么会有三个结构。在代码中还有一些表达式(希望您理解变量的名称)conn->db->rows[i]。我的问题是其中三个是必需的吗?我的意思是,为什么我们需要一个连接结构?为什么不创建一个独立的 FILE *file 东西并完全避免 struct Database *db 指针?

2) 这可能会帮助我解决第一个问题。在练习的 Extra credit 又名(自己制作)部分中,有一个任务如下所示: 尝试修改程序以使用单个全局数据库连接。这个程序的现在版本与另一个版本相比如何? 那么这只是要求我重新设计管理该数据库的“三结构方式”吗?

最佳答案

是的,你只能有struct Adress,一个指向数据库文件的全局FILE *和一个全局struct Adress rows[MAX_ROWS] 存储数据。但是,真实的数据库有名称、关联文件、权限等(您给出的示例非常简单)。

但是您可以修改结构来改进模型并帮助您理解。考虑一下,例如:

struct Database {
char name[DB_NAME];
enum charset_list charset;
struct Address rows[MAX_ROWS];
}

它现在为您提供有关数据库的更多信息(它的名称和字符集 [utf8latin1 等]),并且它们都包含在同一个 struct(简洁)。将其与“全局变量”模型进行比较……一团糟

连接也是如此。

struct Connection {
FILE *fp;
char request_db[DB_NAME];
char host[HOSTNAME];
char ip[IPV4_LEN];
struct User *user;
struct database *conn;
}

在这里,您有一个版本可以让您拥有多个数据库文件的索引文件。当用户请求连接时,函数将查找索引表、检索数据库名称和相应的文件、设置 FILE * 指针并进行必要的函数调用以返回有效的 conn 给用户。

关于c - Learn C the Hard Way 的 ex17 数据库设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60957204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com