我有一个使用不同结构进行配置的软件。每次我保存配置时,结构都会转储到一个二进制文件中,每次我加载配置时,都会读取文件并用数据填充结构。
出于某种原因,我想更改此设置并使用数据库来存储软件的配置。不幸的是,我真的不知道如何设计表格。
假设我有以下结构:
typedef struct StructUser {
BYTE readAccess;
BYTE writeAccess;
BYTE passLength;
BYTE nameLength;
char pass[32];
char name[32];
}
您将如何构建具有最佳灵 active (添加或删除一些元素)和最佳性能(快速获取配置)的数据库?
起初我想每个结构都有一个表,其中有许多列作为结构中的元素,但它似乎不太容易维护。
谢谢
最佳答案
您需要考虑很多事情。
首先,您是否希望您的数据库具有可读结构?或者您是否可以忍受数据库中非常不可读的数据,但更适合映射到您的结构?
- 如果您想要一个可读的数据库结构(最好是第 3 或第 4 范式),请提供与您的结构中的逻辑字段相对应的数据库表列。在许多情况下,这意味着每个结构字段一列,但在某些情况下,您可能希望将多个字段映射到一列中,或者将一个字段拆分为多列。考虑使用 ORM(对象关系映射)工具来帮助您(例如,对于 Java,您有 Hibernate,对于 C/C++,可能有类似的工具)。
- 如果您可以忍受数据库中不可读的数据,您可以将您的结构序列化为一个字符串,并将该字符串保存在数据库中。从数据库中读取时,只需读取字符串并反序列化即可。然后您的表只需要一列,就是这个序列化的字符串。
尽管序列化字符串方法可能会为您提供更快的初始解决方案,并且可以更方便地在不更改数据库的情况下更改结构,但从长远来看,您可能会遇到问题。拥有清晰的数据库结构意味着其他工具也可以使用您的数据库(例如像 Access 这样的 RAD 工具)。因此,请考虑使用 ORM 工具进行调查。
其次,您的应用程序可能还需要将数据保存到数据库中。但是你打算怎么做呢?
- 您会清空数据库并重新填充它(就像重新创建文件一样)吗?
- 您是否会选择性地更新数据库中的记录(但您需要表中的键)?
您可能希望多个应用程序或用户将他们的配置存储在数据库中。因此,清空数据库并重新填充它可能不是一个选项(尽管有一些技巧可以解决这个问题,比如将用户名存储在第二列中,并清除该用户的所有内容)。因此,您需要将原始数据库 key 与您的结构一起存储,以便您知道以后需要更新哪些记录。同样,ORM 工具可以帮助您。
从文件到数据库对您来说似乎很简单,但事实并非如此。事先考虑要对数据库执行的操作,并预见有足够的时间来设计数据库和编写访问数据库的代码。
关于c++ - 如何将 C++ 结构转换为数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472332/