1. Node
-
Definition: A data entity in your graph — like a row in RDBMS, but more flexible.
-
Represents: A person, place, product, project, application, etc.
-
Example:
Here, the node is
Userwith anameproperty.
2. Relationship
-
Definition: A connection between two nodes.
-
Direction: Always has a start node and an end node (can be one-way or effectively two-way if you create two relationships).
-
Represents: How entities are connected — e.g.,
WORKS_ON,FRIENDS_WITH,OWNS. -
Example:
Meaning: Alice works on ProjectX.
3. Properties
-
Definition: Key-value pairs that store information inside a node or relationship.
-
Purpose: Add details to your entities or their connections.
-
Example:
-
Node property:
name,role -
Relationship property:
since
-
4. Labels
-
Definition: Tags assigned to nodes to categorize them.
-
Purpose: Helps organize nodes and speed up queries.
-
Example:
-
Label
Usermeans this node represents a user. -
Label
Projectmeans this node represents a project.
-
5. Relationship Types
-
Definition: Names that define the kind of connection between nodes.
-
Purpose: Makes queries clear and precise.
-
Example:
-
WORKS_ONandHAS_ACCESS_TOare relationship types.
-
📌 Putting It All Together (Example use case)
-
Nodes: Alice, Apollo, TimeTracker
-
Labels:
User,Project,Application -
Relationships:
WORKS_ON,HAS_ACCESS_TO -
Properties:
name,role,since
1. Shift Your Thinking
In relational databases (RDBMS), you think in tables and joins.
In graphs, you think in entities (nodes) and connections (relationships).
Instead of asking:
“Which tables should I create, and how will I join them?”
You ask:
“What are my real-world things (nodes), and how are they related (relationships)?”
2. The Core Building Blocks
-
Identify Entities → Nodes
-
People, products, projects, applications, locations, etc.
-
-
Identify Relationships
-
How entities are connected:
WORKS_ON,OWNS,HAS_ACCESS_TO,FRIENDS_WITH.
-
-
Add Properties
-
Attributes of nodes (e.g.,
name,role,email). -
Attributes of relationships (e.g.,
since,permission_level).
-
3. Design Steps
Step 1: Understand the Domain
-
Gather your business requirements.
-
Write down nouns (likely nodes) and verbs (likely relationships).
Example from your use case:
-
Nouns (nodes): User, Project, Application
-
Verbs (relationships): WORKS_ON, HAS_ACCESS_TO
Step 2: Define Labels and Relationship Types
-
Labels group similar nodes (e.g.,
User,Project). -
Relationship Types define connection meaning (e.g.,
WORKS_ON,HAS_ACCESS_TO).
Step 3: Add Properties Where They Matter
-
Node Properties → Details about the entity.
-
Relationship Properties → Details about the connection (date assigned, role, access level).
Step 4: Avoid Over-Modeling
-
Don’t turn every detail into a node — only make a node if it could connect to something else or be searched independently.
-
Keep simple attributes as properties.
Example:
✅ User {name: "Alice", role: "Developer"} → Properties
❌ Making Role a separate node unless you need relationships between roles.
Option 1 – Role as a property on the User node ✅
Use this if roles are just attributes of the user and you don’t need to connect roles to other entities.
-
Simple and lightweight.
-
Good when roles are only used for filtering (e.g.,
WHERE role = "Developer"). -
No extra complexity.
Option 2 – Role as a separate node ❌ (only if unnecessary)
Make it a node only if you need to store more information about the role or connect it to other things.
You’d do this only if:
-
Roles have their own properties (e.g., description, permissions, hierarchy).
-
You need to query relationships between roles (e.g., “Developer” inherits from “Engineer”).
-
You want to link many users to the same role node to avoid duplication.
Step 5: Think About Queries Early
Design the model so common queries are fast:
-
“Which projects can this user access?”
-
“Who has access to this application?”
-
“What applications are linked to Project X?”
4. Example: Your Use Case in Graph Thinking
-
Nodes:
User,Project,Application -
Labels:
User,Project,Application -
Relationships:
WORKS_ON,HAS_ACCESS_TO -
Properties:
-
Node:
name,role -
Relationship:
since,level
-

Comments
Post a Comment