Files
Media.JoshHeaps.Net/Media.JoshHeaps.Net/Database/011_graph_edges.sql
T
2026-02-09 13:23:34 -07:00

23 lines
1.2 KiB
SQL

-- Graph Edges Table
-- Stores connections/relationships between nodes in a graph
CREATE TABLE IF NOT EXISTS app.graph_edges (
id BIGSERIAL PRIMARY KEY,
graph_id BIGINT NOT NULL,
source_node_id BIGINT NOT NULL,
target_node_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (graph_id) REFERENCES app.graphs(id) ON DELETE CASCADE,
FOREIGN KEY (source_node_id) REFERENCES app.graph_nodes(id) ON DELETE CASCADE,
FOREIGN KEY (target_node_id) REFERENCES app.graph_nodes(id) ON DELETE CASCADE,
-- Prevent duplicate edges between the same nodes
UNIQUE (graph_id, source_node_id, target_node_id),
-- Prevent self-loops (node connecting to itself)
CHECK (source_node_id != target_node_id)
);
CREATE INDEX IF NOT EXISTS idx_graph_edges_graph_id ON app.graph_edges(graph_id);
CREATE INDEX IF NOT EXISTS idx_graph_edges_source_node_id ON app.graph_edges(source_node_id);
CREATE INDEX IF NOT EXISTS idx_graph_edges_target_node_id ON app.graph_edges(target_node_id);
-- Composite index for efficient bidirectional queries
CREATE INDEX IF NOT EXISTS idx_graph_edges_nodes ON app.graph_edges(source_node_id, target_node_id);