2015-04-07 47 views

回答

3

你不这样做,你可能不应该。 Neo4j已经提供了一个内部的id字段,它是一个自动递增的整数。它不是节点的属性,而是通过id()功能来访问,就像这样:

MATCH (n:Person) 
RETURN id(n); 

所以每当您创建的任何节点,这已自动免费通过发生Neo4j的,而不是由做py2neo。

如果你需要一个不同类型的代码标识符,我会推荐一些全球唯一的东西,比如一个UUID,这在python中很容易实现,而不是一个自动递增整数。

将自动递增数字作为ID的麻烦在于,由于它们对它们有一个模式(自动递增),所以人们依赖于标识符的值,或者依赖于ID的预期方式分配。这在数据库中几乎总是一个坏主意。标识符的唯一目的是独一无二的。这并不意味着什么,在某些情况下甚至不保证不会改变。避免将对任何特定值或分配方案的依赖嵌入代码中。

这就是为什么我喜欢UUID,是因为他们的分配方案本质上是任意的,他们显然不代表什么 - 所以他们不会诱使设计师去做任何聪明的事情。 :)

+0

我可以得到一些解释:我在网上其他地方看过,我们不应该依赖Neo4j的内部ID它保留为节点,而应该使用我们自己的ID,但是你在这里提到,我们不应该使用我们自己的ID。 谢谢! – Lamoni

+0

@Lamoni这个答案并不是说你不应该使用你自己的ID。使用自己的ID是一个好主意。在ID中嵌入含义是一个坏主意。 (因此UUID,没有意义,它们都是唯一的) – FrobberOfBits

+0

ahh谢谢你的澄清,我的错误误解。谢谢! – Lamoni