architecture
简介
功能说明
这是P02的ArchitectureD的gs移植版本
mysql/sql
的格式化数据库,使用者需要根据规范提供数据库的描述文件(.xml格式)
载入数据库描述文件,能够自动生成数据库创建的SQL语句。 可以将完整映射根据描述文件分拆为数据库关系表的一行,也可以进行还原操作。
1. 为什么保存为关系表数据时,抽出一个字段以后需要检查父节点?
这是为了使得保存的数据中更小,比如一个数据结构:{ "location" : { "room" : ROOM, "pos" : POS ]), "me" : ME ])
数据库描述文件要求抽出location/room & location/pos
,然后将剩余的结果保存为一个pack字段,这样,因为location在数据抽走必为空,如果保存的字段中总有这个空映射,即浪费资源,也不利于阅读管理,所以抽走字段以后需要进行检测,如果为空则不处理。
2. 为什么还原为映射数据时,如果读出的值为UNDEFINED
, 需要检查父节点是否存在?
并且在必要的时候设置为空映射?以第一个例子而言,如果ROOM和POS字段均不存在, 即location字段为空映射时,在保存的数据进行恢复时会略过设置值的操作,这样,因为location字段在保存时已经被抽空不存在,最后还原的数据中location字段就会保持未定义。所以,当我们发现一个字段为UNDEFINED
时, 就核查其父节点保证存在。
3. 采用上述方法,是否会造成保存数据时没有location字段,但是还原以后却多 了这个字段呢?
有可能。但是我们认为这是可以接受的的,因为如果location字段下的子字段被数据库描述文件所定义,那么我们认为这为恒有字段,所以其父节点类型应保持为映射。倘若我们认为,location还原以后必须保持存入时的状态,不允许将之自动设置为映射,那么我们就不能在描述文件中定义location下的子字段而是直接定义整个location字段。