- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在存储管理上采用分页式结构,在数据库保留块中用位示图对空闲-Read
DBMS 实验报告
设计思路
设计的主要目标是减少用户的限制。即:没有table数目的限制,没有字段数目的限制,没有记录空间的限制。唯一的限制就是磁盘空间的大小。为了达到这个目标,在研究和借鉴几个常用的空间管理技术的基础上,采用分页式的文件存储结构,用位视图实现空闲区的管理。又借鉴了Unix系统中的索引节点技术,使数据在物理上离散存储,而在逻辑上又可以看为一个无限制的整体。为了实现字段的插入删除,表的记录按照字段存储,即:每个字段单独索引存储。为了实现无限制创表,表模式存储在一张系统表中,作为系统表的记录存在;而在内部,系统表被作为普通表存储。
在程序的结构上,为了降低复杂度,对操作进行了分层处理。
Read, write
FIELDREC, FIELD
用户命令(SQL语句)
词法分析getSym
Input_buffer
语法分析 expression
SYMBOL
Table方法
Block方法(文件操作)
二、 自定义数据结构
BLOCK
封装了对文件的操作,每次读写文件通过该类里面的SAVE和LOAD方法整块的存储和读取.另外该类也定义了一些对基本数据类型读取和写入的方法,包括:
void write(unsigned char *,int num,int index);
void write(unsigned long n,int num,int index);
void writeString(char * string,int num,int index);
void readString(char * string,int num,int index);
unsigned long read(int count,int index);
void read(unsigned char * c,int num,int index);
TABLE
封装了对表的记录的插入、删除、读取和字段的插入、删除、读取,使上层的语法分析无须接触表的底层操作。包括:
void addField(FIELD k);
void findField(FIELD k);
int addRecord(FIELDREC * values);
void listField();
void listRecord(FIELD conditionField,SYMBOL op,FIELDREC expect);
void listRecord(FIELD conditionField,SYMBOL op,FIELDREC expect,FIELDNODE * head);
FIELDREC getOneFieldRecord(FIELD k,int index); //get record of the field
int changeKey(char * newKeyName);
void deleteRecord(int i);
void deleteRecord(FIELD conditionField,SYMBOL op,FIELDREC expect);
int deleteField(FIELD f);
3.FIELD
该结构用于存储一个字段的信息(字段长,字段名称,字段类型,是否可为空,是否为主键,是否有效)。
typedef struct{
int valid;
int length;
SYMBOL type;
int nl;
int key;
int indexBlock;
char * name;
}FIELD;
4.FIELDREC
该结构用于存储一个字段的记录
typedef struct{
char * value;
SYMBOL type;
}FIELDREC;
其中VALUE存储了当前值的字符串表示,TAYE存储了当前数据类型。
5.FIELDNODE
主要用于表示多个字段时链表的各个操作。
typedef struct fieldNode{
FIELD f;
fieldNode * next;
}FIELDNODE;
三、文件存放结构
整个数据库系统只有一个数据文件,由用户指定。文件采用分页式存储,页面大小2048B
1.每个数据库有个SUPER BLOCK,用于存储当前文件的页数以及系统表和用户表所在的索引结点以及空闲区的位示图。如下图所示:
SUPER BLOCK
文件长(4B)系统表索引结点(4B)USER表索引结点(4B)
BITMAP
Next bit map node
2.每个表有一个表索引结点,存放字段总数和实际字段总数,记录总数和实际记录总数以及存放字段块的索引。如下图所示:
TABLE IND
文档评论(0)