93 lines
2.5 KiB
Plaintext
93 lines
2.5 KiB
Plaintext
-- 1. (Optional) Clean up the database
|
|
MATCH (n) DETACH DELETE n;
|
|
|
|
-- 2. Create indexes for faster matching
|
|
CREATE INDEX ON :JobType(id);
|
|
CREATE INDEX ON :ObjectType(id);
|
|
CREATE INDEX ON :Job(id);
|
|
CREATE INDEX ON :Object(id);
|
|
CREATE INDEX ON :MgmtStatus(id);
|
|
|
|
-- 3. Create Nodes from CSV files
|
|
|
|
-- Job Types
|
|
LOAD CSV FROM '/data/job_types.csv' WITH HEADER AS row
|
|
CREATE (n:JobType {
|
|
id: row.id,
|
|
name: row.name,
|
|
standard_duration: toInteger(row.standard_duration),
|
|
standard_cost: toInteger(row.standard_cost)
|
|
});
|
|
|
|
-- Object Types
|
|
LOAD CSV FROM '/data/object_types.csv' WITH HEADER AS row
|
|
CREATE (n:ObjectType {
|
|
id: row.id,
|
|
name: row.name,
|
|
category: row.category
|
|
});
|
|
|
|
-- Job Instances
|
|
LOAD CSV FROM '/data/jobs.csv' WITH HEADER AS row
|
|
CREATE (n:Job {
|
|
id: toInteger(row.id),
|
|
name: row.name,
|
|
duration: toInteger(row.duration),
|
|
cost: toInteger(row.cost),
|
|
job_no: row.job_no
|
|
});
|
|
|
|
-- Object Instances
|
|
LOAD CSV FROM '/data/objects.csv' WITH HEADER AS row
|
|
CREATE (n:Object {
|
|
id: row.id,
|
|
name: row.name,
|
|
obj_no: row.obj_no
|
|
});
|
|
|
|
-- Management Status Nodes
|
|
LOAD CSV FROM '/data/mgmt_status.csv' WITH HEADER AS row
|
|
CREATE (n:MgmtStatus {
|
|
id: row.id,
|
|
type: row.type,
|
|
status: row.status
|
|
});
|
|
|
|
|
|
-- 4. Create Relationships from relations.csv
|
|
|
|
-- Job IS_A JobType
|
|
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
|
|
WITH row WHERE row.type = 'IS_A' AND toIntegerOrNull(row.from_id) IS NOT NULL
|
|
MATCH (from:Job {id: toInteger(row.from_id)})
|
|
MATCH (to:JobType {id: row.to_id})
|
|
CREATE (from)-[:IS_A]->(to);
|
|
|
|
-- Object IS_A ObjectType
|
|
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
|
|
WITH row WHERE row.type = 'IS_A' AND toIntegerOrNull(row.from_id) IS NULL
|
|
MATCH (from:Object {id: row.from_id})
|
|
MATCH (to:ObjectType {id: row.to_id})
|
|
CREATE (from)-[:IS_A]->(to);
|
|
|
|
-- Job PRECEDES Job
|
|
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
|
|
WITH row WHERE row.type = 'PRECEDES'
|
|
MATCH (from:Job {id: toInteger(row.from_id)})
|
|
MATCH (to:Job {id: toInteger(row.to_id)})
|
|
CREATE (from)-[:PRECEDES]->(to);
|
|
|
|
-- Job REQUIRES Object
|
|
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
|
|
WITH row WHERE row.type = 'REQUIRES'
|
|
MATCH (from:Job {id: toInteger(row.from_id)})
|
|
MATCH (to:Object {id: row.to_id})
|
|
CREATE (from)-[:REQUIRES {quantity: toInteger(row.quantity), unit: row.unit}]->(to);
|
|
|
|
-- Job HAS_STATUS MgmtStatus
|
|
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
|
|
WITH row WHERE row.type = 'HAS_STATUS'
|
|
MATCH (from:Job {id: toInteger(row.from_id)})
|
|
MATCH (to:MgmtStatus {id: row.to_id})
|
|
CREATE (from)-[:HAS_STATUS]->(to);
|