Group 6: Relational Data
Relational managed offerings: Azure SQL Database, Azure SQL Managed Instance, SQL Server on VM, PostgreSQL, MySQL, MariaDB, plus Database Migration Service (transition helper). Differences revolve around control surface, feature coverage, scaling model, and migration friction.
Rule of Thumb: Prefer managed PaaS (Azure SQL DB / SQL MI / OSS managed) unless you have feature gaps or OS-level dependencies requiring SQL on VM.
Services & Core Identity
Azure SQL DB
Fully managed single DB / elastic pools. Automatic patching, built-in HA. Limited surface vs full instance.
- Use: new cloud-native workloads.
- Scaling: DTU or vCore, serverless tier.
- Features: Hyperscale for large sizes.
SQL Managed Instance
Near full SQL Server surface (Agent, cross-db) with PaaS ops. Instance-level features restored.
- Use: lift from on-prem w/ minimal change.
- Managed backups, patching.
- VNet integration.
SQL on VM
IaaS-hosted SQL. Full OS + instance control; manual patching/HA unless configured.
- Use: unsupported features, custom agents.
- Higher ops overhead.
- Can use Azure Backup.
PostgreSQL
Managed OSS relational (Flexible Server). Extensions support; versioned upgrades.
- Use: open-source stack preference.
- High concurrency, rich types.
- Can scale compute/storage independently.
MySQL
Managed MySQL (Flexible). Popular LAMP stack DB; read replicas, zone redundant HA.
- Use: web apps relying on MySQL dialect.
- Per-second billing on flexible.
- Performance tiers (Burst / Gen Purpose / Memory).
MariaDB
Managed MariaDB (legacy workloads). Similar to MySQL; may have different engine optimizations.
- Use: existing MariaDB apps.
- Consider MySQL/PostgreSQL for new builds.
- Migration path via DMS.
DMS
Database Migration Service orchestrates minimal downtime migrations and assessments.
- Use: shift SQL/OSS DB to managed.
- Helps with schema + data movement.
- Not a runtime target.
Key Differences
Dimension | SQL DB | SQL MI | SQL VM | PostgreSQL | MySQL | MariaDB |
---|---|---|---|---|---|---|
Control Surface | Database only | Instance-level | Full OS/Instance | Instance-level | Instance-level | Instance-level |
HA Built-in | Yes | Yes | Manual config | Yes | Yes | Yes |
Scaling Granularity | Per DB/pool | Per instance | VM size | Compute/Storage | Compute/Storage | Compute/Storage |
Serverless Option | Yes (auto-pause) | No | No | No | No | No |
Feature Parity w/ Full SQL | Subset | Near-full | Full | N/A | N/A | N/A |
Extensions | Limited | Limited | Full (OS install) | Rich (Postgres ext) | Plugins | Plugins |
Ops Overhead | Lowest | Low | High | Low | Low | Low |
Ideal Use | Cloud-native app | Lift & shift SQL | Legacy / full control | OSS structured data | LAMP style apps | Existing MariaDB |
Mathematical Selection Model (Runtime)
Models relative fit. Criteria [0..10]. SQL VM and DMS included but DMS always flagged as helper only.
Score_SQLDB = 0.30*C_cloud + 0.20*C_lowops + 0.15*C_autoScale + 0.15*(10 - C_fullSurface) + 0.10*(10 - C_ext) + 0.10*C_serverless
Score_SQLMI = 0.30*C_instance + 0.20*C_feature + 0.15*C_network + 0.15*C_lowops + 0.10*(10 - C_serverless) + 0.10*(10 - C_ext)
Score_SQLVM = 0.30*C_fullSurface + 0.20*C_ext + 0.15*C_osControl + 0.15*C_feature + 0.10*(10 - C_lowops) + 0.10*C_license
Score_PG = 0.35*C_ext + 0.20*C_cloud + 0.15*C_open + 0.10*C_lowops + 0.10*C_scalability + 0.10*C_json
Score_MySQL = 0.30*C_lamp + 0.20*C_cloud + 0.15*C_lowops + 0.10*C_scalability + 0.10*(10 - C_fullSurface) + 0.15*C_replica
Score_Maria = 0.30*C_existing + 0.20*C_lowops + 0.15*C_cloud + 0.10*C_scalability + 0.10*C_ext + 0.15*(10 - C_migrate)
SQL DB {{vm.scores.sqldb | number:2}}
SQL MI {{vm.scores.sqlmi | number:2}}
SQL VM {{vm.scores.sqlvm | number:2}}
PostgreSQL {{vm.scores.pg | number:2}}
MySQL {{vm.scores.mysql | number:2}}
MariaDB {{vm.scores.maria | number:2}}
Recommended: {{vm.recommended.name}} ({{vm.recommended.score | number:2}})
Interpretation Rules
- If C_fullSurface ≥ 7 OR C_osControl ≥ 6 ⇒ SQL VM (verify TCO).
- If C_instance ≥ 6 AND C_feature ≥ 6 ⇒ SQL MI.
- If C_serverless ≥ 6 OR unpredictable load ⇒ SQL DB (serverless tier).
- If C_open ≥ 6 AND C_ext ≥ 6 ⇒ PostgreSQL.
- If C_lamp ≥ 6 ⇒ MySQL (or Maria if existing base).
When NOT to Use Relational
- Massive scale, low latency key-value ⇒ Cosmos DB / Redis.
- Semi-structured analytics at scale ⇒ Data Lake / Synapse.
- Write path > vertical scaling limit ⇒ consider sharding or alt model.
Summary
SQL DB for most new SQL workloads; SQL MI for near full SQL features with less admin; SQL on VM only for OS/feature gaps; PostgreSQL for extensibility & rich types; MySQL/MariaDB for existing ecosystems. Start with ops burden & feature parity, refine via scaling + ecosystem needs.