从零开始,实现一个最简单的数据库: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); // 反序列化,即:从文件中恢复本对象 };
下面是我在写这个类之前的头脑风暴,不过太乱了,基本上没人(包括我自己)看得懂。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。