[Avg. reading time: 5 minutes]

MySQL vs Neo4J

MySQL Tables

create table customer (id int,name varchar(100));
insert into customer values (1, 'Rachel');
create table creditcard (id int, number varchar(16));
insert into creditcard values (101, '1234567890123456');
create table merchant (id int, name varchar(100));
insert into merchant values (1001, 'Macys');

Set Relation

create table customer_creditcard (id int, cust_id int, cc_id int)
insert into customer_creditcard values (999, 1,101)
create table transaction (id int, customer_cc_id int, amount float, ts datetime);
insert into transaction(111, 999, 100.00, '2023-01-01 11:23:34')
erDiagram
    CUSTOMER {
        int id
        varchar name
    }
    CREDITCARD {
        int id
        varchar number
    }
    MERCHANT {
        int id
        varchar name
    }
    CUSTOMER_CREDITCARD {
        int id
        int cust_id
        int cc_id
    }
    TRANSACTION {
        int id
        int customer_cc_id
        float amount
        datetime ts
    }

    CUSTOMER ||--o{ CUSTOMER_CREDITCARD : "has"
    CREDITCARD ||--o{ CUSTOMER_CREDITCARD : "has"
    CUSTOMER_CREDITCARD ||--o{ TRANSACTION : "has"

Neo4J

Clear all nodes

match(n) detach delete n
CREATE (rachel:Customer {name: 'Rachel'})

CREATE (card1:CreditCard {number: '1234567890123456'})

CREATE (macys:Merchant {name: 'Macys'})

CREATE (rachel)-[:OWNS]->(card1)

CREATE (tx1:Transaction {amount: 100, timestamp: datetime()})

CREATE (card1)-[:USED_IN]->(tx1)-[:MADE_AT]->(macys)
graph TD
    rachel["Customer: Rachel"]
    card1["CreditCard: 1234567890123456"]
    macys["Merchant: Macys"]
    tx1["Transaction: Amount 100, Timestamp datetime()"]

    rachel -->|OWNS| card1
    card1 -->|USED_IN| tx1
    tx1 -->|MADE_AT| macys

#neo4j #mysqlVer 5.5.3

Last change: 2025-10-15