暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
数据库简单实现(C语言).pdf
39
41页
2次
2024-03-17
免费下载
数据库简单实现(C 语言)
介绍
一、数据结构
自定义基础数据类型
数据字典表数据结构
表信息存储
列信息存储
自定义表信息存储
数据块头信息
数据项(元组)存储信息
过滤表达式结
其他
二、全局变量
三、宏定义
四、INSERT 实现
五、CREATE 实现
六、SELECT 实现
七、函数以及用户界面函数
windows dev c++行,linux strnicmp()
itoa()
一些问题: 由于时间的限制,在块存储结构以及数据字典表的存储上进行了简化,若之后
要实现同步等操作的实现将会出现错误,还有较多的冗余代码,没有抽取封装成单独的函数
SELECT 的实现只支持单表查询,WHERE 语句只支持一个过滤表达式。其中有部分归并排序
和外排序的代码没有完成,但是 SELECT 中有块内排序的函数。
介绍
该程序是数据库的简单实现,包含 INSERT 插入操作,CREATE 建表操作,SELECT 查询操作,
在数据结构设计时考虑了 DELETE 删除操作所以在 Item 结构中增加了 bool 型变量 IsDelete
标记是否已经删除,因为在 postgresql 中的 DELETE 是假删除所以 DELETE 操作很容易实现,
我也在显示的函数里加入了 IsDeleted 判断,有需要行独立添加相关函数即可。自定
ID 10000 以上,文件名即为 ID在文件存储中是以块(页)形式存储的,大小为 8K
元组的长度是变长的,字符串也是变长存储。
该程序实现的主要难度在于数据结构的设计,指针操作,内存中数据存储理解以及文件操作。
涉及的核心函数主要有:
内存操作 malloc()free()memcpy()
文件操作 fopen()、fclose()、fread()、fseek()、fwrite()
总体难度不大
一、数据结构
自定义基础数据类型
//数据类型标识枚举型
typedef enum {
CHAR=1,
INT=2,
LONG=3,
FLOAT=4,
DOUBLE=5,
BOOL=6,
Type=7 //DataType 枚举型标识
}DataType;
typedef enum{
less_than=0,
greater_than=1,
equal_to=2,
not_equal_to=3,
less_equal=4,
greater_equal=5
}CmpOperator;
数据字典表数据结构
表信息存储
//pg_class 数据字典表的元组结构体,存储表信
typedef struct pg_class_tuple{
char TableName[20]; //表名
int ID; // ID
int ColNum; //列数量
}PC_Tuple;
列信息存储
//pg_attribute 数据字典表的元组结构体 ,存储列信息
typedef struct pg_attribute_tuple{
char ColName[20]; //列名
int BelongToID; //归属表的 ID
DataType Type; //数据类型标识
int TypeSize; //数据字节长度
int NoOfCol; //列号
bool AbleNull; //是否可以为空true 为可以为空 ??????????字节数为 4不明
原因 ,但是不影响正常读写
}PA_Tuple;
自定义表信息存储
数据块头信息
typedef struct PageHeadData{
int lower;//空闲开始位置
int upper;//空闲结束位置
int special;//special 开始位置
}PageHeadData;
数据项(元组)存储信息
typedef struct Item{
int tuple_start; //元组位置
int length; //元组长度
bool IsDeleted; //删除标记
}Item;
过滤表达式结
typedef struct filter{
int ColNo;
CmpOperator CO;
char *Value;
}Filter;
其他
//一些临时中间变量的结构体,只是为了简洁封装
typedef struct Buffer{
char TypeSetBuffer[50];
int MemoryLen;
int CurrentPos;
bool *pBool;
int *pInt;
long *pLong;
float *pFloat;
double *pDouble;
char *pChar;
int Int;
long Long;
float Float;
double Double;
bool Bool;
}Buffer;
二、全局变量
//标记未使用的 ID,当多次建表时可节省调用查找 ID 是否重复的函数调
int IsIDOccupied=10000;
1
2
块内排序使用
int SortColFlag;
char *page;
存储表列信息可以去掉,我在函数中都作为参数传入作为全局变量只是偷懒不在函数
中定义
of 41
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。