MGE数据存储格式

数据存储主要包括材料类别管理、模板管理、数据管理这几个功能,对应 storage 这个 app。

Template 模板

模板结构

字段名

类型

说明

id

Integer

类别 id,自增类型

title

Char(255)

模板标题,标题不能重复

category

外键

所属材料类别,引用`MaterialCategory`

author

Char(32)

创建者名字,对应 account 中的用户名(作者可以不存在,不作校验)

abstract

Char(512)

简要介绍,包括模板内容、功能、作用等

ref_count

Integer

引用计数,即使用这个模板的数据的数目

pub_date

Date

创建日期

published

Boolean

是否已发布

trashed

Boolean

是否已删除,当数据计数不为零时,删除仅将此值设置为 true,不实际删除

content

JSON

模板内容,一个复杂的字典类型数据,详见文档示例

模板content示例

{
"_ord": ["string", "number", "range", "image", "file", "choice", "array", "table", "container", "generator"],
"string": {"t": 1, "r": true, "misc": {}},
"number": {"t": 2, "misc": {"unit": "v"}},
"range": {"t": 3, "misc": {"r_type": 0, "lb": 1, "ub": 10, "unit": null}},
"image": {"t": 4, "misc": {"multi": false}},
"file": {"t": 5, "r": true, "misc": {"multi": true}},
"choice": {"t": 6, "misc": {
    "opt": ["opt1", "opt2", "..."],
    "grp": [{"name": "grp1", "items": ["1", "2", "3", "..."]},
            {"name": "grp2", "items": ["a", "b", "c", "..."]}]
}},
"array": {"t": 7, "misc": {"t": 3, "misc": {"r_type": 1, "val": 10, "err": 10, "unit": "A"}}},
"table": {"t": 8, "misc": {
    "_head": ["head1", "head2", "..."],
    "head1": {"t": 1, "r": false, "misc": {}},
    "head2": {"t": 2, "misc": {"unit": null}},
    "...": {"t": 1, "misc": {}}
}},
"container": {"t": 9, "misc": {
    "_ord": ["field1", "field2", "..."],
    "field1": {"t": 1, "misc": {}},
    "field2": {"t": 1, "misc": {}},
    "...": {"t": 1, "misc": {}}
}},
"generator": {"t": 10, "misc": {
    "_opt": ["opt1", "opt2", "..."],
    "opt1":  {"t": 1, "misc": {}},
    "a":  {"t": 1, "misc": {}},
    "...":  {"t": 1, "misc": {}}
}}
}

模板字段格式

所有模板字段包含type和misc两个字段,type为字段类型,misc为该字段其它内容。

基本格式形如下:

{
    "fieldname": {
        "t": 0,
        "r": true,
        "misc": {
            "otherkey": "othervalue"
        }
    }
}

其中 t 必须设置,r 如果为true则一定要设置,否则可以设置 false ,也可以没有这个字段。 misc如果为空,则可以是空的 dict,也可以完全没有这个字段。

字段类型(类型值全部定死)

字段名

字段类型

字符串型

1

数值型

2

范围型

3

图片型

4

文件型

5

候选型

6

数组型

7

表格型

8

容器型

9

生成器型

10

具体的misc的内容根据字段类型区分,见下方说明,r字段不再说明。

  1. 字符串型

一个字符串型数据。

文本型type定义为 1,misc为空值

字段名

类型

说明

t

int

文本型数据类型为 1

misc

dict

空的,{}

  1. 数值型

一个数值型数据,包括BSON里面的int、long、double、decimal类型的数值。 数值可以设定有单位或无单位。

数值型的type定义为 2,misc仅包含一个 unit 字段。

字段名

类型

说明

t

int

数值型数据类型为 2

misc.unit

string

数据单位,如果无单位则为空字符串或null

  1. 范围型

一个数值范围,包括区间型 [a, b] 和误差型 a ± b 两种形式。 范围型数据可以设定有单位或无单位。

具体的:

字段名

类型

说明

type

int

范围型数据类型为 3

misc.unit

string

数据单位,如果无单位则为空字符串或`null`

misc.type

int

范围值类型,0表示区间型,1表示误差型

misc.lb

number

范围值区间型下区间(若为误差型则无此字段)

misc.ub

number

范围值区间型上区间(若为误差型则无此字段)

misc.val

number

范围值误差型值(若为区间型则无此字段)

misc.err

number

范围值误差型误差值(若为区间型则无此字段)

  1. 图片型

图片型的type定义为 4,misc仅包含 multi 字段,默认每张图片都需要描述信息。

字段名

类型

说明

type

int

图片型数据类型为 4

misc.multi

bool

指定是否允许多个图片

  1. 文件型

文件型的type定义为 5,misc仅包含 multi 字段,默认每个文件都需要描述信息。

字段名

类型

说明

type

int

文件型数据类型为 5

misc.multi

bool

指定是否允许多个文件

  1. 候选型

候选型相当于下拉列表,前端相当于 select 标签,可以有选项分组,即 optgroup。

字段名

类型

说明

type

int

候选型数据类型为 6

misc.opt

array

候选项数组,全部为字符串类型,不包含分组部分。

misc.grp

array

候选项分组名称数组,仅包含该分组组名。格式为[{"name": "name", "items": ["value0", "value2", "..."]}]

  1. 数组型

此处数组型仅表示一维数组。

字段名

类型

说明

type

int

数组型数据类型为 7

misc

dict

misc对应处定义的其它9种类型(除表格型和数组型外)

  1. 表格型

表格型包含表头和数据部分,直观上数据部分仅为数值和文本两种类型,原则上表格型不能有多级嵌套。

表格型仅能添加123456 类型数据。45类型即图片和文件类型默认不允许多个文件。

字段名

类型

说明

type

int

表格型数据类型为 8

misc._head

array

每一列的列名的数组

misc.[head0]

object

对应列的数据类型(其它列相同,此处不列出)

  1. 容器型

容纳所有字段,相当于MongoDB的一个document,对于用户来说相当于属性分组。

字段名

类型

说明

type

int

容器型数据类型为 9

misc._ord

array

容器中出现的各个字段的名字的数组

misc.[field0]

object

对应字段的属性信息,值可以为任意类型的模板字段(其它字段相同,此处不列出)

  1. 生成器型

生成器型容器型的键值对集合,也就是候选型与容器型的组合,用于按照名称生成对应容器型数据。

字段名

类型

说明

type

int

生成器型数据类型为 10

misc._opt

array

候选项数组,全部为字符串类型。选项不能重复

misc.[opt0]

object

选项和类型对应的dict (其它字段相同,此处不列出)

Material Category & Tag 材料分类与标签

材料分类结构

字段名

类型

说明

id

Integer

类别 id,自增类型

parent

外键

引用到自身

level

int

层级值,从 0 开始,有一个全局根节点,实际的从1开始

name_zh

Char(255)

类别中文名称,同一层级类别名称不能相同

name_en

Char(255)

类别英文名称,同一层级类别名称不能相同

leaf

bool

是否为叶节点

材料标签结构

字段名

类型

说明

id

Integer

类别 id,自增类型

name

Char(32)

标签名称

count

Integer

使用此标签的数据数目

数据格式

数据元数据结构

字段名

类型

说明

id

Integer

类别 id,pgsql AutoField

title

Char

数据标题

category

外键

数据所属类别,引用到`MaterialCategory`

source

JSON

嵌入式文档型,包含来源、支撑项目、引用文献、其它四个字段信息

tid

Integer

所使用的模板的id,这里没有使用外键,需要设置值

keywords

Array

数据关键词,即标签,直接存储文字而不引用到 MaterialTag,第一次创建数据事初始化所有tag,今后使用 `add_tags`和`remove_tags`方法更新

score

Float

数据质量,默认为 0,系统会更新其值

doi

Char

doi

abstract

Char

摘要信息

purpose

Char

数据目的

author

Char

直接存储用户名而不引用到 User

add_time

DateTime

创建时自动赋值

dc_id

Char

对应 mongodb 中的 DataContent 字段的 ObjectId

数据内容结构

数据内容字段格式

  1. 文本型

文本型数据直接存储在所属document,不单独存储。

  1. 数值型

数值型数据在存储时直接存储在所述document,不单独存储。单位不存储。

比如 temperature 值为 10,单位为℃,湿度为20,无单位,则存储为:

{
    "temperature": 10,
    "humidity": 20
}
  1. 范围型

范围型数据存储时存储上下区间或值与误差。单位不存储。

示例:

{
    "temperature": {
        "lb": 0,
        "ub": 12
    },
    "humidity": {
        "val": 10,
        "err": 5
    }
}
  1. 图片型

图片型引用到图片型字段,存储结果为对应的ObjectId。

  1. 文件型

图片型引用到图片型字段,存储结果为对应的ObjectId。

  1. 候选型

文本型数据直接存储在所属document,不单独存储。

  1. 数组型

数组型为一个list,存储的内容跟其类型对应。

  1. 表格型

表格型数据需要单独存储,存储结果为对应的 ObjectId。

  1. 容器型

容器型数据需要单独存储,存储结果为对应的 ObjectId。

{
    "_t": 9,
    "val": ObjectId("12345678909876543212345")
}
  1. 生成器型

生成器类型存储方式跟其字段对应的类型有关,可能是混杂型,包含`sel`和`val`两个字段。

{
    "_t": 10,
    "_n": "selected option name",
    "val": "value of selected...."
}