45 lines
1.7 KiB
SQL
45 lines
1.7 KiB
SQL
-- migrations/20250710201933_create_script_dependencies.sql
|
|
|
|
-- This table stores the dependency graph for table scripts
|
|
-- More efficient design with better indexing
|
|
CREATE TABLE script_dependencies (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
-- The script that creates this dependency
|
|
script_id BIGINT NOT NULL REFERENCES table_scripts(id) ON DELETE CASCADE,
|
|
|
|
-- The table that depends on another (source of dependency)
|
|
source_table_id BIGINT NOT NULL REFERENCES table_definitions(id) ON DELETE CASCADE,
|
|
|
|
-- The table being depended upon (target of dependency)
|
|
target_table_id BIGINT NOT NULL REFERENCES table_definitions(id) ON DELETE CASCADE,
|
|
|
|
-- What type of dependency (for better debugging)
|
|
dependency_type TEXT NOT NULL CHECK (dependency_type IN ('column_access', 'sql_query', 'indexed_access')),
|
|
|
|
-- Additional context (column name, query snippet, etc.)
|
|
context_info JSONB,
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Optimized indexes for fast cycle detection
|
|
CREATE INDEX idx_script_deps_source_target ON script_dependencies (source_table_id, target_table_id);
|
|
CREATE INDEX idx_script_deps_by_script ON script_dependencies (script_id);
|
|
CREATE INDEX idx_script_deps_by_target ON script_dependencies (target_table_id);
|
|
|
|
-- View for easy dependency analysis
|
|
CREATE VIEW dependency_graph AS
|
|
SELECT
|
|
sd.source_table_id,
|
|
sd.target_table_id,
|
|
st.table_name AS source_table,
|
|
tt.table_name AS target_table,
|
|
sd.dependency_type,
|
|
sd.context_info,
|
|
s.name AS schema_name
|
|
FROM script_dependencies sd
|
|
JOIN table_definitions st ON sd.source_table_id = st.id
|
|
JOIN table_definitions tt ON sd.target_table_id = tt.id
|
|
JOIN schemas s ON st.schema_id = s.id;
|