Naming rules and recommendations

This section describes rules and recommendations for the naming of node labels, relationship types, property names, variables, indexes, and constraints.

1. Naming rules

  • Alphabetic characters:

    • Names should begin with an alphabetic character.

    • This includes "non-English" characters, such as å, ä, ö, ü etc.

  • Numbers:

    • Names should not begin with a number.

    • To illustrate, 1first is not allowed, whereas first1 is allowed.

  • Symbols:

    • Names should not contain symbols, except for underscore, as in my_variable, or $ as the first character to denote a parameter, as given by $myParam.

  • Length:

    • Can be very long, up to 65535 (2^16 - 1) or 65534 characters, depending on the version of Neo4j.

  • Case-sensitive:

    • Names are case-sensitive and thus, :PERSON, :Person and :person are three different labels, and n and N are two different variables.

  • Whitespace characters:

    • Leading and trailing whitespace characters will be removed automatically. For example, MATCH ( a ) RETURN a is equivalent to MATCH (a) RETURN a.

Non-alphabetic characters, including numbers, symbols and whitespace characters, can be used in names, but must be escaped using backticks. For example: `^n`, `1first`, `$$n`, and `my variable has spaces`. Database names are an exception and may include dots without the need for escaping. For example: naming a database foo.bar.baz is perfectly valid.

2. Scoping and namespace rules

  • Node labels, relationship types and property names may re-use names.

    • The following query — with a for the label, type and property name — is valid: CREATE (a:a {a: 'a'})-[r:a]->(b:a {a: 'a'}).

  • Variables for nodes and relationships must not re-use names within the same query scope.

    • The following query is not valid as the node and relationship both have the name a: CREATE (a)-[a]->(b).

3. Recommendations

Here are the recommended naming conventions:

Node labels

Camel-case, beginning with an upper-case character

:VehicleOwner rather than :vehicle_owner etc.

Relationship types

Upper-case, using underscore to separate words

:OWNS_VEHICLE rather than :ownsVehicle etc.