你的位置:首页 > 数据库

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


 

因为自己对数据库了解不多,就只能走一步看一部了。先从模式(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);	// 反序列化,即:从文件中恢复本对象};

 

 

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