Zapytania Cypher (Polecenia bazy grafowej)

Poniżej zestawiono kluczowe polecenia w języku Cypher, które realizują główne założenia funkcjonalne projektu – zarówno na etapie budowy struktury, jak i odpytywania bazy przez API.

1. Zarządzanie bazą i zasilanie danymi (Skrypty inicjalizujące)

Czyszczenie bazy przed załadowaniem nowej topologii (populate_db.py):

MATCH (n) DETACH DELETE n

Tworzenie węzłów izotopów i relacji rozpadu (skrypt populate_db.py):

MERGE (n:Izotop {nazwa: $nazwa})
SET n.czas_poltrwania = $hl, 
    n.Z = $z, 
    n.A = $a, 
    n.prawdopodobienstwo_SF = $sf_prob,
    n.widmo = $widmo

Tworzenie relacji rozpadu z dynamicznym typem za pomocą f-stringa w Pythonie:

MERGE (parent:Izotop {nazwa: $parent})
MERGE (child:Izotop {nazwa: $child})
MERGE (parent)-[r:{rel_type}]->(child)
SET r.tryb = $mode, r.prawdopodobienstwo = $fraction

Grupowanie izotopów pod węzłem chemicznym Pierwiastka (populate_db.py):

MERGE (p:Pierwiastek {Z: $z})
SET p.nazwa = $nazwa_pl
WITH p
MATCH (i:Izotop {Z: $z})
MERGE (p)-[:POSIADA_IZOTOP]->(i)

2. Odpytywanie bazy (Realizacja funkcjonalności API)

Pobieranie danych o stabilności do siatki Segrè (routes.py):

MATCH (n:Izotop)
OPTIONAL MATCH (p:Pierwiastek)-[:POSIADA_IZOTOP]->(n)
RETURN n.nazwa AS nazwa, n.Z AS Z, n.A AS A, n.czas_poltrwania AS czas_poltrwania, p.nazwa AS nazwa_pierwiastka

Pobieranie szczegółowych parametrów fizycznych wybranego izotopu (routes.py):

MATCH (n:Izotop {nazwa: $nazwa})
OPTIONAL MATCH (p:Pierwiastek)-[:POSIADA_IZOTOP]->(n)
RETURN n.Z AS Z, n.A AS A, n.czas_poltrwania AS czas_poltrwania, 
       n.prawdopodobienstwo_SF AS sf_prob, n.widmo AS widmo, p.nazwa AS nazwa_pierwiastka

Pobieranie drzewa genealogicznego izotopu – 15 pokoleń w górę i w dół (routes.py):

MATCH (start:Izotop {nazwa: $nazwa})
// Szukamy potomków (w dół drzewa)
OPTIONAL MATCH p_down = (start)-[*1..15]->(down)
// Szukamy przodków (w górę drzewa)
OPTIONAL MATCH p_up = (start)<-[*1..15]-(up)

RETURN start, collect(p_down) AS downs, collect(p_up) AS ups