145 lines
7.4 KiB
SQL
145 lines
7.4 KiB
SQL
// =====================================================
|
|
// NEO4J SCHEMA FROM POSTGRESQL DATA - TSS NAMESPACE
|
|
// Price-focused migration from existing PostgreSQL database
|
|
// Uses TSS (Tech Stack Selector) namespace for data isolation
|
|
// =====================================================
|
|
|
|
// Clear existing TSS data only (preserve TM namespace data)
|
|
MATCH (n) WHERE 'TSS' IN labels(n) DETACH DELETE n;
|
|
|
|
// Clear any non-namespaced tech-stack-selector data (but preserve TM data)
|
|
MATCH (n:Technology) WHERE NOT 'TM' IN labels(n) AND NOT 'TSS' IN labels(n) DETACH DELETE n;
|
|
MATCH (n:PriceTier) WHERE NOT 'TM' IN labels(n) AND NOT 'TSS' IN labels(n) DETACH DELETE n;
|
|
MATCH (n:Tool) WHERE NOT 'TM' IN labels(n) AND NOT 'TSS' IN labels(n) DETACH DELETE n;
|
|
MATCH (n:TechStack) WHERE NOT 'TM' IN labels(n) AND NOT 'TSS' IN labels(n) DETACH DELETE n;
|
|
|
|
// =====================================================
|
|
// CREATE CONSTRAINTS AND INDEXES
|
|
// =====================================================
|
|
|
|
// Create uniqueness constraints for TSS namespace
|
|
CREATE CONSTRAINT price_tier_name_unique_tss IF NOT EXISTS FOR (p:PriceTier:TSS) REQUIRE p.tier_name IS UNIQUE;
|
|
CREATE CONSTRAINT technology_name_unique_tss IF NOT EXISTS FOR (t:Technology:TSS) REQUIRE t.name IS UNIQUE;
|
|
CREATE CONSTRAINT tool_name_unique_tss IF NOT EXISTS FOR (tool:Tool:TSS) REQUIRE tool.name IS UNIQUE;
|
|
CREATE CONSTRAINT stack_name_unique_tss IF NOT EXISTS FOR (s:TechStack:TSS) REQUIRE s.name IS UNIQUE;
|
|
|
|
// Create indexes for performance (TSS namespace)
|
|
CREATE INDEX price_tier_range_idx_tss IF NOT EXISTS FOR (p:PriceTier:TSS) ON (p.min_price_usd, p.max_price_usd);
|
|
CREATE INDEX tech_category_idx_tss IF NOT EXISTS FOR (t:Technology:TSS) ON (t.category);
|
|
CREATE INDEX tech_cost_idx_tss IF NOT EXISTS FOR (t:Technology:TSS) ON (t.monthly_cost_usd);
|
|
CREATE INDEX tool_category_idx_tss IF NOT EXISTS FOR (tool:Tool:TSS) ON (tool.category);
|
|
CREATE INDEX tool_cost_idx_tss IF NOT EXISTS FOR (tool:Tool:TSS) ON (tool.monthly_cost_usd);
|
|
|
|
// =====================================================
|
|
// PRICE TIER NODES (from PostgreSQL price_tiers table)
|
|
// =====================================================
|
|
|
|
// These will be populated from PostgreSQL data with TSS namespace
|
|
// Structure matches PostgreSQL price_tiers table:
|
|
// - id, tier_name, min_price_usd, max_price_usd, target_audience, typical_project_scale, description
|
|
// All nodes will have labels: PriceTier:TSS
|
|
|
|
// =====================================================
|
|
// TECHNOLOGY NODES (from PostgreSQL technology tables)
|
|
// =====================================================
|
|
|
|
// These will be populated from PostgreSQL data with TSS namespace
|
|
// Categories: frontend_technologies, backend_technologies, database_technologies,
|
|
// cloud_technologies, testing_technologies, mobile_technologies,
|
|
// devops_technologies, ai_ml_technologies
|
|
// All nodes will have labels: Technology:TSS
|
|
|
|
// =====================================================
|
|
// TOOL NODES (from PostgreSQL tools table)
|
|
// =====================================================
|
|
|
|
// These will be populated from PostgreSQL data with TSS namespace
|
|
// Structure matches PostgreSQL tools table with pricing:
|
|
// - id, name, category, description, monthly_cost_usd, setup_cost_usd,
|
|
// price_tier_id, total_cost_of_ownership_score, price_performance_ratio
|
|
// All nodes will have labels: Tool:TSS
|
|
|
|
// =====================================================
|
|
// TECH STACK NODES (will be generated from combinations)
|
|
// =====================================================
|
|
|
|
// These will be dynamically created based on:
|
|
// - Price tier constraints
|
|
// - Technology compatibility
|
|
// - Budget optimization
|
|
// - Domain requirements
|
|
// All nodes will have labels: TechStack:TSS
|
|
|
|
// =====================================================
|
|
// RELATIONSHIP TYPES
|
|
// =====================================================
|
|
|
|
// Price-based relationships (TSS namespace)
|
|
// - [:BELONGS_TO_TIER_TSS] - Technology/Tool belongs to price tier
|
|
// - [:WITHIN_BUDGET_TSS] - Technology/Tool fits within budget range
|
|
// - [:COST_OPTIMIZED_TSS] - Optimal cost-performance ratio
|
|
|
|
// Technology relationships (TSS namespace)
|
|
// - [:COMPATIBLE_WITH_TSS] - Technology compatibility
|
|
// - [:USES_FRONTEND_TSS] - Stack uses frontend technology
|
|
// - [:USES_BACKEND_TSS] - Stack uses backend technology
|
|
// - [:USES_DATABASE_TSS] - Stack uses database technology
|
|
// - [:USES_CLOUD_TSS] - Stack uses cloud technology
|
|
// - [:USES_TESTING_TSS] - Stack uses testing technology
|
|
// - [:USES_MOBILE_TSS] - Stack uses mobile technology
|
|
// - [:USES_DEVOPS_TSS] - Stack uses devops technology
|
|
// - [:USES_AI_ML_TSS] - Stack uses AI/ML technology
|
|
|
|
// Tool relationships (TSS namespace)
|
|
// - [:RECOMMENDED_FOR_TSS] - Tool recommended for domain/use case
|
|
// - [:INTEGRATES_WITH_TSS] - Tool integrates with technology
|
|
// - [:SUITABLE_FOR_TSS] - Tool suitable for price tier
|
|
|
|
// Domain relationships (TSS namespace)
|
|
// - [:RECOMMENDS_TSS] - Domain recommends tech stack
|
|
|
|
// =====================================================
|
|
// PRICE-BASED QUERIES (examples)
|
|
// =====================================================
|
|
|
|
// Query 1: Find technologies within budget (TSS namespace)
|
|
// MATCH (t:Technology:TSS)-[:BELONGS_TO_TIER_TSS]->(p:PriceTier:TSS)
|
|
// WHERE $budget >= p.min_price_usd AND $budget <= p.max_price_usd
|
|
// RETURN t, p ORDER BY t.total_cost_of_ownership_score DESC
|
|
|
|
// Query 2: Find optimal tech stack for budget (TSS namespace)
|
|
// MATCH (frontend:Technology:TSS {category: "frontend"})-[:BELONGS_TO_TIER_TSS]->(p1:PriceTier:TSS)
|
|
// MATCH (backend:Technology:TSS {category: "backend"})-[:BELONGS_TO_TIER_TSS]->(p2:PriceTier:TSS)
|
|
// MATCH (database:Technology:TSS {category: "database"})-[:BELONGS_TO_TIER_TSS]->(p3:PriceTier:TSS)
|
|
// MATCH (cloud:Technology:TSS {category: "cloud"})-[:BELONGS_TO_TIER_TSS]->(p4:PriceTier:TSS)
|
|
// WHERE (frontend.monthly_cost_usd + backend.monthly_cost_usd +
|
|
// database.monthly_cost_usd + cloud.monthly_cost_usd) <= $budget
|
|
// RETURN frontend, backend, database, cloud,
|
|
// (frontend.monthly_cost_usd + backend.monthly_cost_usd +
|
|
// database.monthly_cost_usd + cloud.monthly_cost_usd) as total_cost
|
|
// ORDER BY total_cost ASC,
|
|
// (frontend.total_cost_of_ownership_score + backend.total_cost_of_ownership_score +
|
|
// database.total_cost_of_ownership_score + cloud.total_cost_of_ownership_score) DESC
|
|
|
|
// Query 3: Find tools for specific price tier (TSS namespace)
|
|
// MATCH (tool:Tool:TSS)-[:BELONGS_TO_TIER_TSS]->(p:PriceTier:TSS {tier_name: $tier_name})
|
|
// RETURN tool ORDER BY tool.price_performance_ratio DESC
|
|
|
|
// Query 4: Find tech stacks by domain (TSS namespace)
|
|
// MATCH (d:Domain:TSS)-[:RECOMMENDS_TSS]->(s:TechStack:TSS)
|
|
// WHERE toLower(d.name) = toLower($domain)
|
|
// RETURN s ORDER BY s.satisfaction_score DESC
|
|
|
|
// Query 5: Check namespace isolation
|
|
// MATCH (tss_node) WHERE 'TSS' IN labels(tss_node) RETURN count(tss_node) as tss_count
|
|
// MATCH (tm_node) WHERE 'TM' IN labels(tm_node) RETURN count(tm_node) as tm_count
|
|
|
|
// =====================================================
|
|
// COMPLETION STATUS
|
|
// =====================================================
|
|
|
|
RETURN "✅ Neo4j Schema Ready for PostgreSQL Migration with TSS Namespace!" as status,
|
|
"🎯 Focus: Price-based relationships with TSS namespace isolation" as focus,
|
|
"📊 Ready for data migration with namespace separation from TM data" as ready_state,
|
|
"🔒 Data Isolation: TSS namespace ensures no conflicts with Template Manager" as isolation;
|