OrientDB图形数据库设计:在边和节点上存储属性

OrientDB图形数据库设计:在边和节点上存储属性,orientdb,graph-databases,Orientdb,Graph Databases,我正在使用OrientDB存储有关视频租赁的信息。我将成员和电影表示为节点。每当一个会员借了一部电影,我就在他们之间加上一条边。该数据集具有多次用户借用电影的功能。此外,我还需要存储电影租赁的月份/季节(仍在决定哪一个适合我们的需要,但除此之外)。我本打算将上述细节存储在边缘上。但我遇到了以下问题: 建议避免在边缘存储属性。我想知道我是否应该改变我的方法?如果是,那么替代方案是什么 提前谢谢 我认为在您的情况下,您可能会选择直接在边缘创建属性。存储与租赁相关的数据的替代方法是在成员和电影之间创

我正在使用OrientDB存储有关视频租赁的信息。我将成员和电影表示为节点。每当一个会员借了一部电影,我就在他们之间加上一条边。该数据集具有多次用户借用电影的功能。此外,我还需要存储电影租赁的月份/季节(仍在决定哪一个适合我们的需要,但除此之外)。我本打算将上述细节存储在边缘上。但我遇到了以下问题:

建议避免在边缘存储属性。我想知道我是否应该改变我的方法?如果是,那么替代方案是什么


提前谢谢

我认为在您的情况下,您可能会选择直接在边缘创建属性。存储与租赁相关的数据的替代方法是在成员和电影之间创建第三个节点(例如RentalData),并利用PK和FK字段,但它类似于关系数据库,不需要

我复制了一个小DB:

create class Member extends V;
create property Member.id integer;
create property Member.name string;
create property Member.surname string;
create index Member.id unique;


create class Movie extends V;
create property Movie.id integer;
create property Movie.title string;
create property Movie.minutes integer;
create index Movie.id unique;

create class borrows extends E;
create property borrows.rentaldate Datetime;

create vertex Member set id = 1, name = "Paul", surname = "Green";
create vertex Member set id = 2, name = "John", surname = "Smith";
create vertex Member set id = 3, name = "Frank", surname = "Redding";

create vertex Movie set id = 1, title = "Interstellar", minutes = 170;
create vertex Movie set id = 2, title = "The Gladiator", minutes = 176;

create edge borrows from (select from Member where id = 1) to (select from Movie where id = 1) set rentaldate = sysdate();
create edge borrows from (select from Member where id = 1) to (select from Movie where id = 2) set rentaldate = sysdate();
create edge borrows from (select from Member where id = 2) to (select from Movie where id = 2) set rentaldate = sysdate();
create edge borrows from (select from Member where id = 3) to (select from Movie where id = 1) set rentaldate = sysdate();
create edge borrows from (select from Member where id = 3) to (select from Movie where id = 2) set rentaldate = sysdate();

我将“rentaldata”属性直接存储在edge“borrows”上,以将成员与借用的电影相关联,我认为您可以像我一样执行此操作。

与您提供的链接相同:

使用模式

从OrientDB 2.0开始,如果在模式中声明了字段, 字段名不存储在文档/顶点/边本身中。这 提高性能并节省大量磁盘空间