Java 定向数据库:将属性添加到属性
我是orientdb的新手,我正在探索各种可能性。我心中有一个项目,我只想确保我开始的方向是正确的 为了让您快速了解我想要做什么,可以将其想象为MS Access或Kexi,这意味着一种管理数据库的软件。这个解释就足以回答我的问题了 将创建一些“表”来管理软件,其他数据“表”将由用户创建。Orient DB为类的每个“属性”/“字段”使用以下“属性” 名称Java 定向数据库:将属性添加到属性,java,database,orientdb,Java,Database,Orientdb,我是orientdb的新手,我正在探索各种可能性。我心中有一个项目,我只想确保我开始的方向是正确的 为了让您快速了解我想要做什么,可以将其想象为MS Access或Kexi,这意味着一种管理数据库的软件。这个解释就足以回答我的问题了 将创建一些“表”来管理软件,其他数据“表”将由用户创建。Orient DB为类的每个“属性”/“字段”使用以下“属性” 名称 类型 链接类型 链接的_类 强制性 只读 非空值 最小值 最大值 整理 但是对于用户数据库类“fields”,我想向其字段添加更多属性 所以
类型 链接类型
链接的_类
强制性
只读
非空值
最小值
最大值
整理 但是对于用户数据库类“fields”,我想向其字段添加更多属性 所以我的第一个想法是,将用户数据库的字段结构和添加的属性存储到数据库中。用户数据将被放入常规orient db“表”中,而添加的字段/属性信息将存储在系统数据库中 但我不想把信息放在两个不同的地方,而是想知道是否还有其他方法可以继续。例如,我可以扩展用于存储字段属性的类并添加新属性。但我不确定这是否真的可能。可以肯定的是,web界面将不再工作,或者至少不会显示那些添加的字段 。。。我的问题清楚吗?这很让人困惑,因为在orient DB中,字段被称为属性,这些属性也有属性(如上所列)
更新 我想您暗示的是NoSQL数据库的主要特性是根本没有结构。因此,为无结构数据库定义结构有点毫无意义
在这种情况下,如果我认为“结构”应该保持灵活,它可以作为每个字段的元数据来实现。例如,一个“字段”可以有一个“名称”,但这对我来说仅仅是足够的信息。我还需要:
- 全名
- 简称
- 描述
第二次更新 我试图改变财产,它似乎工作,或者我应该说,并没有错误信息。但是当我试图查询信息时,我什么也得不到。在控制台上,它给了我:
----+------
# |@CLASS
----+------
0 |null
----+------
1 item(s) found. Query executed in 0.036 sec(s).
我试图在谷歌上搜索自定义属性,但几乎没有相关文档
也许我可以试着从java代码中读取它,因为这是我更可能使用的
我有点这样看待信息
select expand(properties) from ( select expand(classes) from metadata:schema) where name='Item'
----+------+-----+----+--------+---------+--------+-------+----+----+------+------------------------------------------------------+-------
# |@CLASS|name |type|globalId|mandatory|readonly|notNull|min |max |regexp|customFields |collate
----+------+-----+----+--------+---------+--------+-------+----+----+------+------------------------------------------------------+-------
0 |null |Name |7 |21 |false |false |false |null|null|null |{description="This is the name of the item", access=1}|default
1 |null |Price|1 |22 |false |false |false |null|null|null |null |default
----+------+-----+----+--------+---------+--------+-------+----+----+------+------------------------------------------------------+-------
这意味着运行我在文档中找到的这个命令不起作用:
ALTER CLASS Item CUSTOM name.display=1
有趣的问题
OrientDB的优点在于它的灵活性。您可以决定是否要构造数据模型(定义模式约束)。通过为这些类定义和定义这些属性上的约束/方面(由OrientDB调用),可以强制实施模式约束。除了列出的系统定义的属性外,还可以定义自定义属性。也许这就是你要找的地方
例如:
CREATE CLASS MyTable
CREATE PROPERTY MyTable.name STRING
ALTER PROPERTY MyTable.name CUSTOM displayOrder=1
请注意自定义属性。OrientDB本身忽略此属性(因为没有为其定义语义),因此您必须在应用程序中自己管理它。但是,您在一个位置定义了所有元数据
要查询这些自定义属性,请执行以下操作:
select classes[name='MyTable'].properties[name='name'].customFields.displayOrder FROM metadata:schema
我强烈建议你首先观看这个(非常好而且免费的)视频课程:嗯!那可能很有趣。到目前为止,我对orient DB的严格模式所遇到的唯一问题是,更改类的模式不会影响追溯修改已经创建的对象。因此,我必须让我的程序为已经创建的对象添加或删除一个字段。是的,这是真的。架构更改必须由应用程序管理。OrientDB(还没有?)处理这个问题。然而,通过这种方法,您可以在一个地方拥有所有元数据。这是一个优势,我明白,这正是您想要的。关于此信息的查询:请参阅我的更新答案。注意:使用
info class
命令时,您看不到自定义属性,另请参见感谢提供的信息,我将尝试一下。