如何查看OrientDB

时间:2015-11-08 04:02:39

标签: orientdb

我有两张桌子,如下所示。

表1:国家/地区

c_id, int
c_name, varchar(20) (PK)

此表中的示例记录为。

c_id | c_name
1 | USA
2 | UK
3 | PAK

表2:移民

i_id, int
i_name, varchar(20)
i_country, int (FK)

此表中的示例记录为。

i_id | i_name | i_country
1 | John | 1
2 | Graham | 2
3 | Ali | 3

问题1:

我想在OrientDB中创建两个类(表)但我需要知道FK字段的数据类型应该是什么以及在其中插入什么。我的意思是我应该在查询中写入什么来插入PK表的id。它需要是@rid吗?怎么样?

问题2:

什么是用于生成以下输出的OrientDB SQL。

i_id | i_name | i_country | c_id | c_name
1 | John | 1 | 1 | USA
2 | Graham | 2 | UK
3 | Ali 3 | PAK 

4 个答案:

答案 0 :(得分:2)

使用OrientDB,您可以通过在记录之间使用直接Edge链接来避免创建FK字段和连接操作。例如:

create class Country extends V;
create class Immigrant extends V;
create class comesFrom extends E;

create property Country.c_id integer;
create property Country.c_name String;
create property Immigrant.i_id integer;
create property Immigrant.i_name String;

insert into Country(c_id, c_name) values (1, USA);
insert into Country(c_id, c_name) values (2, UK);
insert into Country(c_id, c_name) values (3, PAK);

insert into Immigrant(i_id, i_name) values (1, John);
insert into Immigrant(i_id, i_name) values (2, Graham);
insert into Immigrant(i_id, i_name) values (3, Ali);

现在你可以直接连接你想要的记录(我使用了一个名为'comeFrom'的边缘和子查询来链接id字段,但你也可以直接使用@RID字段)

create edge comesFrom from (select from Immigrant where i_id = 1) to (select from Country where c_id = 1);
create edge comesFrom from (select from Immigrant where i_id = 2) to (select from Country where c_id = 2);
create edge comesFrom from (select from Immigrant where i_id = 3) to (select from Country where c_id = 3);

最后,您可以在没有连接操作的情况下查询所需的字段:

select i_id, i_name, out('comesFrom').c_id as c_id, out('comesFrom').c_name as c_name 
from Immigrant unwind c_id, c_name

----+------+----+------+----+------
#   |@CLASS|i_id|i_name|c_id|c_name
----+------+----+------+----+------
0   |null  |1   |John  |1   |USA
1   |null  |2   |Graham|2   |UK
2   |null  |3   |Ali   |3   |PAK
----+------+----+------+----+------

在Orient Studio中,您应该获得如下图表:

enter image description here

答案 1 :(得分:0)

OrientDB不支持加入。

您应该将Immigrant类中的i_country字段声明为Link to Country类,或者如果您想要双向关系,则可以使用Graph Model。

如果您想使用直接链接

你可以插入像这样的移民

insert into Immigrant set id=1, name ='John', country = (select from country where id = 1 )

然后

select id,name,country.id,country.name form Immigrant

答案 2 :(得分:0)

你可以用这样的javascript函数加速插入和链接操作:

enter image description here

因此,当您决定创建新人时,会自动创建边缘。您还可以决定将该人放在何处:

enter image description here

对你有帮助吗?

答案 3 :(得分:0)

我认为您创建了一个文档数据库,因为我通过创建文档数据库而不是图形数据库来重现该问题,并且像我一样得到了同样的例外。这是因为如果要使用“顶点”和“边”,则必须使用“图形数据库”类型。

enter image description here