Create a Node or an Attribute?
| Criterion | Create a node if… | Add an attribute if… |
|---|---|---|
| Own existence | The concept exists independently of other nodes. E.g. EMPLOYEE exists even without an associated SKILL. | The information makes no sense without its parent node. E.g. start_date without EMPLOYEE does not exist. |
| Own relations | The concept is linked to other concepts. E.g. SUPPLIER — located_in — COUNTRY. | The information points to no other concept. E.g. country_name is a simple string. |
| Shared concept | The concept is shared by several nodes. E.g. SKILL is linked to several EMPLOYEE and JOB_PROFILE. | The information belongs to a single instance. E.g. employee_id is unique to each EMPLOYEE. |
| AI agent questions | The AI agent will need to navigate to this concept or start from it. E.g. “All suppliers of this part?” → PART — is_supplied_by — SUPPLIER. | The AI agent only needs to read the value. E.g. “Creation date of this part?” → created_at on PART is enough. |
| Change over time | The concept can change or have its own history. E.g. a SUPPLIER’s certification (obtained, renewed, revoked). | The value is stable and intrinsic. E.g. the SUPPLIER’s legal_registration_number. |
| Volume | The concept has several attributes of its own. A node with 3+ attributes deserves to exist. E.g. a PART has a name, a weight, a material… | The value is atomic: one field, one type. E.g. weight_kg: 2.4 |
| ★ Filters | The AI agent will need to filter on this concept from several node types. E.g. COUNTRY filters SUPPLIER, PLANT, EMPLOYEE → pivot node. | The filter applies to a single node type. E.g. status: "approved" only filters SUPPLIER. |
| ★ Navigation | The concept is the entry point of the query. E.g. “Everything based in Italy?” → COUNTRY as the starting point. | The AI agent reads the value without navigating. E.g. “Nationality of this supplier?” → SUPPLIER.country = "Italy" is enough. |
Example:
- ✅
SUPPLIERas a node —PART — is_supplied_by — SUPPLIER — located_in — COUNTRY: the AI agent filters fromPART,SUPPLIERandCOUNTRY. “All approved Italian suppliers?” becomes a natural navigation. - ❌
STATUSas a node —PART — has_status — STATUS {value: "approved"}: the AI agent only filters fromPART.WHERE PART.status = "approved"is enough, no need to navigate.