码迷,mamicode.com
首页 > 数据库 > 详细

从零开始,实现一个最简单的数据库:Property

时间:2015-06-08 00:57:44      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:

 

因为自己对数据库了解不多,就只能走一步看一部了。先从模式(Schema)开始做起。但要做模式,就先要做属性(Property)。所以先实现一个类Property。

我的Property很简单,只有3个比较重要的字段:属性名,取值类型(如整型、字符串),键类型(主键、外键)。

在写这个类的时候,主要考虑2件事情:1,Property在内存中是怎么体现的,也就是这个类的字段;2,怎么保存到硬盘(metadata文件)中去。

 

下面仅把类的声明列出来,具体实现就算了,免得页面太凌乱、而且有凑字数之嫌。

先做到这里吧,下一步需要什么功能再添加进去。

简单做过1、2次测试,debug了大半天,终于问题解决可以(暂时)正常运行了。

// LzjSchema中的列
// 本对象为定长对象,故Serialize、Unserialize均较易
class LzjProperty{
public:
	enum LP_ValueType{	// 该属性的取值类型
		LP_Integer,	// 整型
		LP_Float,	// 浮点型
		LP_Date,	// 日期
		LP_Time,	// 时间
		LP_Char,	// 字符型
	};
	enum LP_KeyType{	// 本属性的键类型
		LP_None	= 0,	// 非主/外键
		LP_PrimaryKey	= 1<<0,	// 主键
		LP_ForeignKey	= 1<<1,	// 外键,即【本表所引用的表】的主键
	};
	enum LP_ConstraintType{	// 限制
//		LP_None	= 0,		// 无限制
		LP_NotNull	= 1<<0,	// 非Null
		LP_Unique	= 1<<1,	// 唯一性
	};
public:
	LString		m_strPropertyName;	// 属性名
	LP_ValueType	m_valueType;
	LP_KeyType	m_keyType;
	LP_ConstraintType	m_constraintType;
public:
	LzjProperty();
	LzjProperty(LString strPropertyName, LP_ValueType valueType, LP_KeyType keyType, LP_ConstraintType constraintType);
	void	SetProperty(LString strPropertyName, LP_ValueType valueType, LP_KeyType keyType, LP_ConstraintType constraintType);

	void	Serialize(LFile *pFile);	// 序列化,即:将本对象保存在文件中
	void	Unserialize(LFile *pFile);	// 反序列化,即:从文件中恢复本对象
};

 

 

下面是我在写这个类之前的头脑风暴,不过太乱了,基本上没人(包括我自己)看得懂。

技术分享

从零开始,实现一个最简单的数据库:Property

标签:

原文地址:http://www.cnblogs.com/Lzjxk/p/DB_Property.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!