Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
艰苦地学习C';s ex17数据库设计问题_C_Database_Memory Management_Database Design_Static Memory Allocation - Fatal编程技术网

艰苦地学习C';s ex17数据库设计问题

艰苦地学习C';s ex17数据库设计问题,c,database,memory-management,database-design,static-memory-allocation,C,Database,Memory Management,Database Design,Static Memory Allocation,我真的被这件事难住了。ex17应该通过提供一个函数来教我堆和堆栈内存分配(我的问题很具体,但我会把它留在那里,以防您需要完整的代码)。关于数据库的某些设计决策的目的没有太多解释,这就是我寻求帮助的原因 1) 必要性还是仅仅是设计的便利性(惯例) 我不知道为什么会有三个结构。代码中还有这样的表达式(希望您理解变量的名称)conn->db->rows[i]。我的问题是,其中有三个是必要的吗?我是说,为什么我们需要一个连接结构呢?为什么不创建一个独立的FILE*FILE文件,完全避免使用struct

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

1) 必要性还是仅仅是设计的便利性(惯例)

我不知道为什么会有三个结构。代码中还有这样的表达式(希望您理解变量的名称)
conn->db->rows[i]
。我的问题是,其中有三个是必要的吗?我是说,为什么我们需要一个连接结构呢?为什么不创建一个独立的
FILE*FILE
文件,完全避免使用
struct Database*db
指针呢

2) 也许这能帮我解决第一个问题。
在练习的
Extra credit
aka(自己制作)部分,有一项任务如下:
尝试重新编写程序,以使用单个全局数据库连接。现在这个版本的程序与另一个版本相比如何?
那么这只是要求我修改管理这个数据库的“3-structure-way”吗?

是的,您只能有
struct-address
,一个指向数据库文件的全局
文件*
,以及一个全局
struct-address行[MAX\u rows]
以存储数据。但是,真正的数据库有名称、相关文件、权限等(您给出的示例非常简单)

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

struct Database {
    char name[DB_NAME];
    enum charset_list charset;
    struct Address rows[MAX_ROWS];
}
它现在为您提供了有关数据库的更多信息(它的名称和字符集[
utf8
latin1
,等等),并且都包含在相同的
结构中(非常简洁)。将其与“全局变量”模型进行比较。。。真是一团糟

连接也是如此

struct Connection {
    FILE *fp;
    char request_db[DB_NAME];
    char host[HOSTNAME];
    char ip[IPV4_LEN];
    struct User *user;
    struct database *conn;
}
在这里,您有一个版本,它允许您拥有多个数据库文件的索引文件。当用户请求连接时,函数将查找索引表,检索数据库名称和相应的文件,设置
文件*
指针,并进行必要的函数调用,以将工作的
连接返回给用户

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