你的位置:首页 > 数据库

[数据库]从零开始实现一个最简单的数据库_Step2:Schema


属性(Property)做好后,就到了模式(Schema)了。其实模式仅仅是属性的封装,属性写的稳健的话,模式做起来会轻松很多。

因为我是一点点的写的代码,写之前也没有做太多架构方面的东西(毕竟小程序),所以经常会有修改。基本上从周一改到了今天,接口方面改的还不是特别的多,但实现方面确实几经周折。

我在写模式的时候,考虑最多的也就,2件事情:1,在设计层面,模式应该包含哪些内容(当然主要是属性),又有哪些类需要用到模式(以及怎么使用它);2,模式在内存、硬盘中都是以何种方式进行存储的。最早的时候我是设想的在内存里以List去维护模式中的属性,也就是动态大小,但这显然没必要,毕竟一个模式基本上是不允许修改属性个数的。所以后来干脆以数组来维护了。

另外就是如何设置属性了。最终的版本其实还是应该以传统的数据库指令的方式,如"Create Schema ..."的方式,但现在若是要去实现一个命令解析器则明显不显示,所以就用了一个临时的解决方案,即SetProperty(int nPrptyIndex, LzjProperty *pPrpty),来一个个的手工指定。

差不多就是这些了,看代码吧。

 

// 模式,元数据,即metadata/* 一个元数据在硬盘中的结构:	part1: m_strSchemaName	part2: 本metadata的字节数(为part1、part2、part3的加总),本Schema的属性数	part3: m_propertyList*/class LzjSchema{private://	void	Init(DWORD dwNumPrpty);public:	LString		m_strSchemaName;	// 本模式的名称//	LList<LzjProperty*>	m_propertyList;	// 该模式的属性。m_propertyList还是保存指针吧,至少不用处理【拷贝构造函数、operator=】之类的问题了。暂时以这种方式处理吧,后期还是要改为ParseCmd的	DWORD	m_dwNumPrpty;	// 本模式中的属性个数	Ptr_LzjProperty	*m_propertyArr;	// [本数组中的每个元素]均指向一个LzjPropertypublic:	LzjSchema();	LzjSchema(LString strSchemaName);	~LzjSchema();	// 删除本模式中的所有属性	void	ParseCmd(LString *pStrCmd);	// 后期还是要改为此一形式,即通过命令行来定义模式//	void	AddProperty(LzjProperty *pPrpty);	// 向本对象中添加属性	void	SetNumPrpty(DWORD dwNumPtpy);	// 设置本对象的属性个数	void	SetProperty(int nPrptyIndex, LzjProperty *pPrpty);	// 设置本对象的属性	LzjProperty::LP_ValueType	GetPrptyType(int nPrptyIndex);	DWORD	GetNumPrpty();	DWORD	Serialize(LFile *pFile);	// 序列化,即:将本对象保存在文件中	DWORD	Unserialize(LFile *pFile);	// 反序列化,即:从文件中恢复本对象	void	ConsoleOut(std::ostream *pCout);};

  




塞舌尔六日游行程安排参考去塞舌尔旅游跟团行程塞舌尔旅游护照签证塞舌尔旅游路线报价费用塞舌尔旅游哪里好玩呢信宜石根山风景旅游区在哪里?石根山风景旅游区怎么去? 石根山风景旅游区门票多少钱?信宜石根山风景旅游区攻略? 南丹山原生态风景区怎么样?三水南丹山原生态风景区介绍? 顺德碧桂园度假村预订电话?碧桂园度假村酒店房价? 康琦赛欢乐世界如何?湛江康琦赛欢乐世界门票包含什么? 康琦赛好玩吗?湛江康琦赛有什么好玩的? 湛江康琦赛欢乐世界门票预订?康琦赛欢乐世界订票电话? 恩平举人村一天游攻略?举人村门票价格? 2013旅游推荐之苏梅岛 九寨沟长海攻略_九寨沟长海景点介绍_九寨沟长海 春节旅游好去处之成都 春节苏梅岛旅游攻略 清远江滨公园适合情侣去游玩?江滨公园门票多少? 清远新银盏温泉环境怎么样?水质好不好? 清远国家森林公园长湖景区里面环境怎么样? 广州皮皮虾可以生吃吗??皮皮虾哪个季节吃最好对身体最有益?? 02013A130JAQ2A Datasheet 02013A130JAQ2A Datasheet 12067A391JAT2A Datasheet 12067A391JAT2A Datasheet 02013A130JAT2A Datasheet 02013A130JAT2A Datasheet 东航万里行会员 东航万里行会员 东航万里行会员 哥本哈根是哪个国家 哥本哈根是哪个国家 哥本哈根是哪个国家 香港黄大仙算命 香港黄大仙算命 香港黄大仙算命