【发布时间】:2015-02-02 21:46:40
【问题描述】:
我是 orientdb 的新手,我正在探索各种可能性。我有一个项目,我只想确保我从正确的方向开始。
为了让您快速了解我想要做什么,可以将其想象为 MS Access 或 Kexi,这意味着管理数据库的软件。这个解释对我的问题来说已经足够了。
将创建一些“表格”来管理软件,而其他数据“表格”将由用户创建。 Orient DB 为类的每个“属性”/“字段”使用以下“属性”。
名称
类型
Linked_Type
Linked_Class
强制
只读
Not_Null
最小
马克斯
整理
但是对于用户数据库类“字段”,我想为他们的字段添加更多属性。
所以我的第一个想法是将用户数据库的字段结构与这些添加的属性一起存储到数据库中。用户数据将被放入常规的orient db“表”中,而添加的字段/属性信息将存储在系统数据库中。
但我没有将信息保存在 2 个不同的地方,而是想知道是否没有其他方法可以继续。例如,也许我可以扩展用于存储字段属性的类并添加我的新属性。但我不确定这是否真的可能。可以肯定的一件事是 Web 界面将不再工作,或者至少不会显示那些添加的字段。
...我的问题清楚了吗?这只是令人困惑,因为在东方 DB 字段被称为属性也有属性(上面列出)
更新
我想你暗示的是 NoSQL 数据库的主要功能根本没有结构。所以为无结构数据库定义结构有点没有意义。
在这种情况下,如果我认为“结构”应该保持灵活,它可以实现为每个字段的元数据。例如,一个“字段”可以有一个“名称”,但这对我来说还不够。我还需要:
- 全名
- 简称(缩写)
- 说明
因此,例如,在用户界面中,可以显示该信息以帮助用户。或者此信息可用于生成用于文档目的的 wiki 网页。
如果实现为元数据,我可以有一个按类名和字段名索引的巨大表。每次我引用数据库字段时,如果元数据可用,我都会查看该表。如果是,我使用它,如果不是,我就忽略它。这将允许灵活的结构,因为即使没有定义元数据,也可以添加新的“字段”。
另外我选择 OrientDB 的原因不一定是因为它缺乏结构,因为我确实喜欢结构化信息。首先是因为如果继承,可以让一个类继承一个超类。其次,因为任何对象都可以链接到任何对象。这是我在关系数据库中不能做的两件事。
我的项目的一部分是处理需要任何组件来包含任何组件的棋盘游戏组件。例如,游戏板可以容纳 Pawns、令牌和卡片。卡片还可以存放棋子、代币等。这些物体在游戏过程中会四处移动。因此,图形数据库似乎非常适合此目的。
但是,如果您有继承,那么严格的字段结构对我来说并不是真正的问题。例如,拥有多种不同字段结构的卡片只需要在一个超类中具有共同的信息。例如,物品卡可以具有超类“物品”,并具有名为“武器”、“盔甲”、“盾牌”的派生类,每个类都有自己的字段。
第二次更新
我尝试更改属性,它似乎有效,或者我应该说没有错误消息。但是当我尝试查询信息时,我什么也得不到。在控制台上它给了我:
----+------
# |@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
【问题讨论】:
-
我强烈推荐你先看这个(非常好而且免费)视频课程:udemy.com/orientdb-getting-started