To prawdopodobnie jest zbyt nieaktualne, aby było przydatne, ale opublikuję, jeśli pomoże innym!
Przechowuję nieskierowane wykresy, takie jak twój drugi przykład, i mam ograniczenie, że node_a musi być mniejsze niż node_b. Następnie trywialnie umieszczasz UNIQUE ograniczenie na parę i wiedzieć, że dane są spójne. Zapytania wymagają nieco więcej pracy, porównując node_a z mniejszą z {a,b} i node_b z inną wartością. PostgreSQL (baza danych, którą znam najlepiej) zapewnia GREATEST() i LEAST() funkcje, które tu pomagają.