Zero-Code Database Builder Platform
HeliosDB Full plans a zero-code database builder for business teams: describe tables, relationships and reports in plain language, review the generated schema, indexes and queries, and apply them without writing SQL. The builder and natural-language-to-SQL are on the roadmap and not in the current release; today schemas and queries are written in SQL over the PostgreSQL listener or the HTTP SQL gateway.
Planned: a natural-language database builder and natural-language-to-SQL are on the roadmap. Read the documentation.
Problem Being Solved
The Core Challenge
The global developer shortage means organizations cannot hire enough database engineers. Yet current database tools still require:
- SQL Expertise: Schema design, query optimization, index tuning
- DevOps Knowledge: Deployment, scaling, backup, monitoring
- Security Configuration: Access control, encryption, audit logging
- Performance Tuning: Query plans, memory settings, connection pools
- Ongoing Maintenance: Migrations, upgrades, troubleshooting
Why This Problem Persists
Current low-code/no-code platforms (Airtable, Notion, Retool) solve UI generation but not the database layer:
- They use simplified data stores, not production databases
- They lack advanced features (transactions, indexes, joins)
- They cannot scale beyond departmental use
- They create shadow IT and data silos
- They require database expertise for anything complex
HeliosDB's Unique Solution
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ HeliosDB Zero-Code Builder │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ Natural Language Interface ││
│ │ "Create a customer database with orders and products" ││
│ │ "Add a field to track customer lifetime value" ││
│ │ "Show me top customers by revenue this quarter" ││
│ └─────────────────────────────────────────────────────────────┘│
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ AI Understanding Engine ││
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││
│ │ │Intent Parser│ │Schema Gen │ │Query Gen │ ││
│ │ │- Create │ │- Tables │ │- SELECT │ ││
│ │ │- Modify │ │- Relations │ │- Aggregates │ ││
│ │ │- Query │ │- Indexes │ │- Joins │ ││
│ │ │- Admin │ │- Constraints│ │- Subqueries │ ││
│ │ └─────────────┘ └─────────────┘ └─────────────┘ ││
│ └─────────────────────────────────────────────────────────────┘│
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ Auto-Optimization Layer ││
│ │ - Index recommendation - Query plan optimization ││
│ │ - Partition strategy - Connection pooling ││
│ │ - Caching configuration - Security hardening ││
│ └─────────────────────────────────────────────────────────────┘│
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ Production Database Engine ││
│ │ Full HeliosDB: MVCC, SSI, Multi-Protocol, Distributed ││
│ └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘
Key Capabilities
- Natural Language Schema Design: Describe your data model in plain English
- Intelligent Schema Generation: AI creates normalized, indexed schemas
- Auto Query Generation: Ask questions in natural language, get SQL results
- Visual Schema Editor: Drag-and-drop for those who prefer visual tools
- One-Click Deployment: a database deployed in minutes
- Self-Optimizing: ML-driven index and query optimization
Concrete Business Examples
Example 1: Startup MVP - Launch in Hours
Scenario: Non-technical founder building a SaaS product needs a database but has no engineering team.
-- Zero-code interface: Natural language commands
-- User types: "Create a SaaS database for a project management tool"
-- HeliosDB generates:
CREATE SCHEMA project_saas;
CREATE TABLE project_saas.organizations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
plan_tier VARCHAR(50) DEFAULT 'free',
created_at TIMESTAMPTZ DEFAULT NOW(),
settings JSONB DEFAULT '{}'::jsonb
);
CREATE TABLE project_saas.users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
org_id UUID REFERENCES project_saas.organizations(id),
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255),
role VARCHAR(50) DEFAULT 'member',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE project_saas.projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
org_id UUID REFERENCES project_saas.organizations(id),
name VARCHAR(255) NOT NULL,
description TEXT,
status VARCHAR(50) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE project_saas.tasks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES project_saas.projects(id),
assigned_to UUID REFERENCES project_saas.users(id),
title VARCHAR(500) NOT NULL,
description TEXT,
status VARCHAR(50) DEFAULT 'todo',
priority INTEGER DEFAULT 3,
due_date DATE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Auto-generated indexes
CREATE INDEX idx_users_org ON project_saas.users(org_id);
CREATE INDEX idx_projects_org ON project_saas.projects(org_id);
CREATE INDEX idx_tasks_project ON project_saas.tasks(project_id);
CREATE INDEX idx_tasks_assigned ON project_saas.tasks(assigned_to);
CREATE INDEX idx_tasks_status ON project_saas.tasks(status);
-- Auto-generated REST API endpoints
-- GET/POST /api/organizations
-- GET/POST /api/users
-- GET/POST /api/projects
-- GET/POST /api/tasks
-- User types: "Show overdue tasks by project"
SELECT
p.name as project_name,
COUNT(t.id) as overdue_tasks,
ARRAY_AGG(t.title) as task_titles
FROM project_saas.tasks t
JOIN project_saas.projects p ON t.project_id = p.id
WHERE t.due_date < CURRENT_DATE AND t.status != 'done'
GROUP BY p.id, p.name
ORDER BY overdue_tasks DESC;
Example 2: Marketing Team - Campaign Analytics Database
Scenario: Marketing team needs to consolidate campaign data from multiple platforms (Google Ads, Facebook, HubSpot) for unified reporting.
Problem: IT backlog is 6 months; team uses spreadsheets, causing data quality issues.
-- Marketing manager types:
-- "Create a marketing analytics database to track campaigns,
-- leads, and conversions from multiple ad platforms"
-- HeliosDB generates comprehensive schema:
CREATE SCHEMA marketing_analytics;
CREATE TABLE marketing_analytics.campaigns (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
platform VARCHAR(50) NOT NULL, -- google_ads, facebook, hubspot
platform_campaign_id VARCHAR(100),
status VARCHAR(50) DEFAULT 'active',
budget_cents BIGINT,
start_date DATE,
end_date DATE,
target_audience JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE marketing_analytics.ad_spend (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
campaign_id UUID REFERENCES marketing_analytics.campaigns(id),
date DATE NOT NULL,
impressions BIGINT DEFAULT 0,
clicks BIGINT DEFAULT 0,
spend_cents BIGINT DEFAULT 0,
conversions INTEGER DEFAULT 0,
platform_data JSONB
);
CREATE TABLE marketing_analytics.leads (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
campaign_id UUID REFERENCES marketing_analytics.campaigns(id),
email VARCHAR(255),
name VARCHAR(255),
company VARCHAR(255),
source VARCHAR(100),
score INTEGER DEFAULT 0,
status VARCHAR(50) DEFAULT 'new',
created_at TIMESTAMPTZ DEFAULT NOW(),
converted_at TIMESTAMPTZ
);
-- Auto-generated materialized view for dashboards
CREATE MATERIALIZED VIEW marketing_analytics.campaign_performance AS
SELECT
c.id,
c.name,
c.platform,
SUM(s.impressions) as total_impressions,
SUM(s.clicks) as total_clicks,
SUM(s.spend_cents)/100.0 as total_spend,
SUM(s.conversions) as total_conversions,
CASE WHEN SUM(s.impressions) > 0
THEN SUM(s.clicks)::float / SUM(s.impressions)
ELSE 0 END as ctr,
CASE WHEN SUM(s.conversions) > 0
THEN SUM(s.spend_cents) / SUM(s.conversions) / 100.0
ELSE 0 END as cost_per_conversion
FROM marketing_analytics.campaigns c
LEFT JOIN marketing_analytics.ad_spend s ON c.id = s.campaign_id
GROUP BY c.id, c.name, c.platform;
-- Marketing manager asks: "What's our best performing channel this month?"
-- HeliosDB translates to:
SELECT
platform,
SUM(total_spend) as spend,
SUM(total_conversions) as conversions,
SUM(total_spend) / NULLIF(SUM(total_conversions), 0) as cpa,
SUM(total_clicks)::float / NULLIF(SUM(total_impressions), 0) * 100 as ctr_pct
FROM marketing_analytics.campaign_performance
WHERE platform IS NOT NULL
GROUP BY platform
ORDER BY cpa ASC;
-- Results displayed in visual dashboard
Example 3: HR Department - Employee Management System
Scenario: HR team managing 5,000 employees across 20 countries needs centralized employee database with compliance features.
Problem: Current HRIS is inflexible, reporting requires IT tickets, compliance audits are painful.
-- HR Director types:
-- "Build an HR database for global employee management with
-- performance tracking, compensation history, and compliance"
-- HeliosDB generates with compliance features:
CREATE SCHEMA hr_global;
-- Employee core data with PII protection
CREATE TABLE hr_global.employees (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
employee_number VARCHAR(20) UNIQUE NOT NULL,
legal_first_name VARCHAR(100) NOT NULL,
legal_last_name VARCHAR(100) NOT NULL,
preferred_name VARCHAR(100),
email VARCHAR(255) UNIQUE NOT NULL,
hire_date DATE NOT NULL,
termination_date DATE,
department_id UUID,
manager_id UUID REFERENCES hr_global.employees(id),
location_country VARCHAR(2) NOT NULL, -- ISO country code
employment_type VARCHAR(50),
created_at TIMESTAMPTZ DEFAULT NOW()
) WITH (
pii_columns = ARRAY['legal_first_name', 'legal_last_name', 'email'],
data_retention = '7 years',
audit_logging = true
);
-- Compensation with automatic history
CREATE TABLE hr_global.compensation (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
employee_id UUID REFERENCES hr_global.employees(id),
effective_date DATE NOT NULL,
base_salary_cents BIGINT NOT NULL,
currency VARCHAR(3) NOT NULL,
bonus_target_pct DECIMAL(5,2),
equity_units INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT unique_employee_date UNIQUE (employee_id, effective_date)
) WITH (
row_level_security = true,
access_policy = 'hr_compensation_access'
);
-- Performance reviews
CREATE TABLE hr_global.performance_reviews (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
employee_id UUID REFERENCES hr_global.employees(id),
reviewer_id UUID REFERENCES hr_global.employees(id),
review_period VARCHAR(20), -- e.g., "2024-H2"
rating INTEGER CHECK (rating BETWEEN 1 AND 5),
strengths TEXT,
areas_for_improvement TEXT,
goals_next_period JSONB,
submitted_at TIMESTAMPTZ DEFAULT NOW()
);
-- Auto-generated GDPR compliance views
CREATE VIEW hr_global.employee_data_export AS
SELECT
employee_number,
legal_first_name,
legal_last_name,
email,
hire_date,
location_country
FROM hr_global.employees
WHERE termination_date IS NULL;
-- HR asks: "Show me employees due for promotion review"
SELECT
e.employee_number,
e.preferred_name || ' ' || e.legal_last_name as name,
e.hire_date,
c.base_salary_cents / 100.0 as current_salary,
c.currency,
pr.rating as last_rating,
EXTRACT(YEAR FROM AGE(c.effective_date)) as years_at_current_level
FROM hr_global.employees e
JOIN hr_global.compensation c ON e.id = c.employee_id
LEFT JOIN hr_global.performance_reviews pr ON e.id = pr.employee_id
WHERE e.termination_date IS NULL
AND c.effective_date = (
SELECT MAX(effective_date)
FROM hr_global.compensation
WHERE employee_id = e.id
)
AND pr.review_period = (
SELECT MAX(review_period)
FROM hr_global.performance_reviews
WHERE employee_id = e.id
)
AND pr.rating >= 4
AND AGE(c.effective_date) > INTERVAL '18 months'
ORDER BY years_at_current_level DESC;
Example 4: Operations Team - Inventory Management
Scenario: Operations manager at growing e-commerce company needs real-time inventory visibility across 3 warehouses.
Problem: Current system is Excel-based, causing oversells, stockouts, and reconciliation nightmares.
-- Operations manager types:
-- "Create an inventory system for 3 warehouses with
-- real-time stock levels, reorder alerts, and transfer tracking"
-- HeliosDB generates:
CREATE SCHEMA inventory;
CREATE TABLE inventory.warehouses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
code VARCHAR(10) UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
address JSONB,
capacity_units INTEGER
);
CREATE TABLE inventory.products (
sku VARCHAR(50) PRIMARY KEY,
name VARCHAR(500) NOT NULL,
category VARCHAR(100),
unit_cost_cents BIGINT,
reorder_point INTEGER DEFAULT 100,
reorder_quantity INTEGER DEFAULT 500,
lead_time_days INTEGER DEFAULT 14
);
CREATE TABLE inventory.stock_levels (
warehouse_id UUID REFERENCES inventory.warehouses(id),
sku VARCHAR(50) REFERENCES inventory.products(sku),
quantity_on_hand INTEGER DEFAULT 0,
quantity_reserved INTEGER DEFAULT 0,
quantity_incoming INTEGER DEFAULT 0,
last_counted_at TIMESTAMPTZ,
PRIMARY KEY (warehouse_id, sku)
);
CREATE TABLE inventory.stock_movements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
movement_type VARCHAR(20) NOT NULL, -- receipt, sale, transfer, adjustment
sku VARCHAR(50) REFERENCES inventory.products(sku),
from_warehouse_id UUID REFERENCES inventory.warehouses(id),
to_warehouse_id UUID REFERENCES inventory.warehouses(id),
quantity INTEGER NOT NULL,
reference_number VARCHAR(100),
notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
created_by VARCHAR(100)
);
-- Auto-generated trigger to update stock levels
CREATE OR REPLACE FUNCTION inventory.update_stock_on_movement()
RETURNS TRIGGER AS $$
BEGIN
-- Decrease source warehouse
IF NEW.from_warehouse_id IS NOT NULL THEN
UPDATE inventory.stock_levels
SET quantity_on_hand = quantity_on_hand - NEW.quantity
WHERE warehouse_id = NEW.from_warehouse_id AND sku = NEW.sku;
END IF;
-- Increase destination warehouse
IF NEW.to_warehouse_id IS NOT NULL THEN
INSERT INTO inventory.stock_levels (warehouse_id, sku, quantity_on_hand)
VALUES (NEW.to_warehouse_id, NEW.sku, NEW.quantity)
ON CONFLICT (warehouse_id, sku)
DO UPDATE SET quantity_on_hand = inventory.stock_levels.quantity_on_hand + NEW.quantity;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER stock_movement_trigger
AFTER INSERT ON inventory.stock_movements
FOR EACH ROW EXECUTE FUNCTION inventory.update_stock_on_movement();
-- Operations manager asks: "What needs to be reordered?"
SELECT
p.sku,
p.name,
p.reorder_point,
p.reorder_quantity,
SUM(s.quantity_on_hand) as total_on_hand,
SUM(s.quantity_reserved) as total_reserved,
SUM(s.quantity_on_hand) - SUM(s.quantity_reserved) as available,
CASE
WHEN SUM(s.quantity_on_hand) - SUM(s.quantity_reserved) < p.reorder_point
THEN 'REORDER NOW'
WHEN SUM(s.quantity_on_hand) - SUM(s.quantity_reserved) < p.reorder_point * 1.5
THEN 'LOW STOCK'
ELSE 'OK'
END as status
FROM inventory.products p
LEFT JOIN inventory.stock_levels s ON p.sku = s.sku
GROUP BY p.sku, p.name, p.reorder_point, p.reorder_quantity
HAVING SUM(s.quantity_on_hand) - SUM(s.quantity_reserved) < p.reorder_point * 1.5
ORDER BY (SUM(s.quantity_on_hand) - SUM(s.quantity_reserved))::float / p.reorder_point;
Example 5: Finance Team - Budget and Expense Tracking
Scenario: Finance team needs to track departmental budgets, actual spending, and variances across 50 cost centers.
-- Finance manager types:
-- "Create a budget tracking database with department budgets,
-- actual expenses, and variance reporting by cost center"
-- HeliosDB generates:
CREATE SCHEMA finance;
CREATE TABLE finance.fiscal_years (
id VARCHAR(10) PRIMARY KEY, -- e.g., "FY2025"
start_date DATE NOT NULL,
end_date DATE NOT NULL,
status VARCHAR(20) DEFAULT 'planning'
);
CREATE TABLE finance.cost_centers (
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
department VARCHAR(100),
manager_email VARCHAR(255),
parent_cost_center VARCHAR(20) REFERENCES finance.cost_centers(id)
);
CREATE TABLE finance.budget_lines (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
fiscal_year_id VARCHAR(10) REFERENCES finance.fiscal_years(id),
cost_center_id VARCHAR(20) REFERENCES finance.cost_centers(id),
category VARCHAR(100) NOT NULL, -- personnel, travel, software, etc.
month DATE NOT NULL, -- First of month
budgeted_amount_cents BIGINT DEFAULT 0,
approved_by VARCHAR(255),
approved_at TIMESTAMPTZ,
UNIQUE (fiscal_year_id, cost_center_id, category, month)
);
CREATE TABLE finance.actual_expenses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
cost_center_id VARCHAR(20) REFERENCES finance.cost_centers(id),
category VARCHAR(100) NOT NULL,
expense_date DATE NOT NULL,
amount_cents BIGINT NOT NULL,
vendor VARCHAR(255),
description TEXT,
invoice_number VARCHAR(100),
approved BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Auto-generated variance view
CREATE VIEW finance.budget_variance AS
WITH monthly_actuals AS (
SELECT
cost_center_id,
category,
DATE_TRUNC('month', expense_date) as month,
SUM(amount_cents) as actual_cents
FROM finance.actual_expenses
WHERE approved = true
GROUP BY cost_center_id, category, DATE_TRUNC('month', expense_date)
)
SELECT
b.fiscal_year_id,
cc.name as cost_center_name,
cc.department,
b.category,
b.month,
b.budgeted_amount_cents / 100.0 as budgeted,
COALESCE(a.actual_cents, 0) / 100.0 as actual,
(b.budgeted_amount_cents - COALESCE(a.actual_cents, 0)) / 100.0 as variance,
CASE
WHEN b.budgeted_amount_cents > 0
THEN ROUND((COALESCE(a.actual_cents, 0)::numeric / b.budgeted_amount_cents) * 100, 1)
ELSE 0
END as pct_utilized
FROM finance.budget_lines b
JOIN finance.cost_centers cc ON b.cost_center_id = cc.id
LEFT JOIN monthly_actuals a ON
b.cost_center_id = a.cost_center_id AND
b.category = a.category AND
b.month = a.month;
-- Finance manager asks: "Which departments are over budget this quarter?"
SELECT
department,
SUM(budgeted) as total_budget,
SUM(actual) as total_actual,
SUM(variance) as total_variance,
ROUND(SUM(actual) / NULLIF(SUM(budgeted), 0) * 100, 1) as pct_utilized
FROM finance.budget_variance
WHERE month >= DATE_TRUNC('quarter', CURRENT_DATE)
AND month < DATE_TRUNC('quarter', CURRENT_DATE) + INTERVAL '3 months'
GROUP BY department
HAVING SUM(actual) > SUM(budgeted)
ORDER BY SUM(variance) ASC;
Adoption Strategy
Phase 1: Visual Schema Builder (Week 1)
- Drag-and-drop table creation
- Relationship visualization
- Basic natural language commands
Phase 2: AI Query Assistant (Week 2-3)
- Ask questions in plain English
- Results displayed as charts/tables
- Export to Excel/CSV
Phase 3: Auto API Generation (Week 4)
- REST endpoints auto-generated
- GraphQL schema auto-generated
- Webhook support
Phase 4: Enterprise Features (Month 2)
- SSO integration
- Audit logging
- Role-based access
- Data governance
Technical Differentiators
- Transactional engine: full MVCC, indexes and transactions
- Auto-Optimization: ML-driven index and query optimization
- Multi-Protocol: SQL, REST, GraphQL from same schema
- Git-Style Branching: Test schema changes safely
- Enterprise Security: Row-level security, encryption, audit logs
Performance depends on workload and hardware. Published figures are measured on representative fixtures; see the benchmarks page and reproduce them on your own workload.