# ianfinkdata/sql-practice architecture

> Architecture diagram of the GitHub repository ianfinkdata/sql-practice, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ianfinkdata/sql-practice
- Repository: https://github.com/ianfinkdata/sql-practice

## Overview

SQL Practice is a self-paced SQL learning project centered on querying the Oakhaven medallion database. Learners progress from lessons to paired exercises, then apply advanced topics to the database and use the portfolio as a reusable pattern library. The repository also includes Power BI project examples and TMDL/lineage tools, plus a browsable web version. The main workflow and capabilities are documented in the README; source-level edges below are limited to the excerpts provided.

Main entry points: [`project/build.py`](https://github.com/ianfinkdata/sql-practice/blob/main/project/build.py) (Database Builder), [`project`](https://github.com/ianfinkdata/sql-practice/tree/main/project) (Practice Database), [`project/build_lib/messiness.py`](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/messiness.py) (Dirty Data Helpers), [`curriculum`](https://github.com/ianfinkdata/sql-practice/tree/main/curriculum) (Lessons)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_learning["SQL Learning"]
  node_lessons["Lessons"]
  node_exercises["Exercises"]
end

subgraph group_data["Oakhaven Data"]
  node_oakhaven[("Practice Database")]
  node_bronze[("Bronze Data")]
  node_silver[("Silver Views")]
  node_gold[("Gold Models")]
  node_build["Database Builder<br/>[build.py]"]
  node_config["Build Config<br/>[config.py]"]
  node_messiness["Dirty Data Helpers<br/>[messiness.py]"]
  node_customer_gen["Customer Generator"]
  node_employee_gen["Employee Generator"]
  node_product_gen["Product Generator"]
  node_sales_gen["Sales Generator<br/>[generate_sales.py]"]
  node_validation["Database Validation<br/>[validate.py]"]
end

subgraph group_reference["SQL Patterns"]
  node_portfolio["Pattern Library"]
end

subgraph group_bi["Power BI"]
  node_pbip_projects["PBIP Models"]
  node_tmdl_parser["TMDL Parser<br/>[parse_tmdl.py]"]
  node_tmdl_builder["TMDL Catalog Builder<br/>[build_tmdl_db.py]"]
  node_lineage["Pipeline Lineage"]
end

subgraph group_web["Web Edition"]
  node_web_site["Browsable Lessons"]
end

node_learner(("Learner"))

node_learner -->|"studies"| node_lessons
node_learner -->|"practices with"| node_exercises
node_learner -->|"queries"| node_oakhaven
node_lessons -->|"pairs with"| node_exercises
node_lessons -->|"uses from Tier 3"| node_oakhaven
node_oakhaven -->|"contains raw tables"| node_bronze
node_oakhaven -->|"contains clean views"| node_silver
node_oakhaven -->|"contains analytics"| node_gold
node_build -->|"imports settings"| node_config
node_build -->|"generates data"| node_customer_gen
node_build -->|"generates data"| node_employee_gen
node_build -->|"generates data"| node_product_gen
node_build -->|"generates data"| node_sales_gen
node_customer_gen -->|"uses helpers"| node_messiness
node_employee_gen -->|"uses helpers"| node_messiness
node_product_gen -->|"uses helpers"| node_messiness
node_sales_gen -->|"uses helpers"| node_messiness
node_build -->|"creates schema"| node_bronze
node_build -->|"executes SQL"| node_silver
node_build -->|"executes SQL"| node_gold
node_build -->|"runs checks"| node_validation
node_portfolio -->|"patterns verified against"| node_oakhaven
node_pbip_projects -->|"parsed by"| node_tmdl_parser
node_tmdl_builder -->|"calls parser"| node_tmdl_parser
node_lineage -->|"queries metadata"| node_oakhaven
node_lineage -->|"extracts lineage"| node_pbip_projects
node_learner -->|"browses"| node_web_site

click node_lessons "https://github.com/ianfinkdata/sql-practice/tree/main/curriculum"
click node_exercises "https://github.com/ianfinkdata/sql-practice/tree/main/exercises"
click node_oakhaven "https://github.com/ianfinkdata/sql-practice/tree/main/project"
click node_bronze "https://github.com/ianfinkdata/sql-practice/tree/main/project/bronze"
click node_silver "https://github.com/ianfinkdata/sql-practice/tree/main/project/silver"
click node_gold "https://github.com/ianfinkdata/sql-practice/tree/main/project/gold"
click node_build "https://github.com/ianfinkdata/sql-practice/blob/main/project/build.py"
click node_config "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/config.py"
click node_messiness "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/messiness.py"
click node_customer_gen "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_customers.py"
click node_employee_gen "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_employees.py"
click node_product_gen "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_products.py"
click node_sales_gen "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_sales.py"
click node_validation "https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/validate.py"
click node_portfolio "https://github.com/ianfinkdata/sql-practice/tree/main/portfolio"
click node_pbip_projects "https://github.com/ianfinkdata/sql-practice/tree/main/pbip/projects"
click node_tmdl_parser "https://github.com/ianfinkdata/sql-practice/blob/main/pbip/pyscripts/parse_tmdl.py"
click node_tmdl_builder "https://github.com/ianfinkdata/sql-practice/blob/main/pbip/pyscripts/build_tmdl_db.py"
click node_lineage "https://github.com/ianfinkdata/sql-practice/blob/main/pbip/pyscripts/pipeline_lineage.py"
click node_web_site "https://github.com/ianfinkdata/sql-practice/tree/main/docs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_lessons,node_exercises toneBlue
class node_oakhaven,node_bronze,node_silver,node_gold,node_build,node_config,node_messiness,node_customer_gen,node_employee_gen,node_product_gen,node_sales_gen,node_validation toneAmber
class node_portfolio toneMint
class node_pbip_projects,node_tmdl_parser,node_tmdl_builder,node_lineage toneRose
class node_web_site,node_learner toneIndigo
```

## Components

### SQL Learning

- [Lessons](https://github.com/ianfinkdata/sql-practice/tree/main/curriculum): `curriculum`
- [Exercises](https://github.com/ianfinkdata/sql-practice/tree/main/exercises): `exercises`

### Oakhaven Data

- [Practice Database](https://github.com/ianfinkdata/sql-practice/tree/main/project): `project`
- [Bronze Data](https://github.com/ianfinkdata/sql-practice/tree/main/project/bronze): `project/bronze`
- [Silver Views](https://github.com/ianfinkdata/sql-practice/tree/main/project/silver): `project/silver`
- [Gold Models](https://github.com/ianfinkdata/sql-practice/tree/main/project/gold): `project/gold`
- [Database Builder](https://github.com/ianfinkdata/sql-practice/blob/main/project/build.py): `project/build.py`
- [Build Config](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/config.py): `project/build_lib/config.py`
- [Dirty Data Helpers](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/messiness.py): `project/build_lib/messiness.py`
- [Customer Generator](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_customers.py): `project/build_lib/generate_customers.py`
- [Employee Generator](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_employees.py): `project/build_lib/generate_employees.py`
- [Product Generator](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_products.py): `project/build_lib/generate_products.py`
- [Sales Generator](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/generate_sales.py): `project/build_lib/generate_sales.py`
- [Database Validation](https://github.com/ianfinkdata/sql-practice/blob/main/project/build_lib/validate.py): `project/build_lib/validate.py`

### SQL Patterns

- [Pattern Library](https://github.com/ianfinkdata/sql-practice/tree/main/portfolio): `portfolio`

### Power BI

- [PBIP Models](https://github.com/ianfinkdata/sql-practice/tree/main/pbip/projects): `pbip/projects`
- [TMDL Parser](https://github.com/ianfinkdata/sql-practice/blob/main/pbip/pyscripts/parse_tmdl.py): `pbip/pyscripts/parse_tmdl.py`
- [TMDL Catalog Builder](https://github.com/ianfinkdata/sql-practice/blob/main/pbip/pyscripts/build_tmdl_db.py): `pbip/pyscripts/build_tmdl_db.py`
- [Pipeline Lineage](https://github.com/ianfinkdata/sql-practice/blob/main/pbip/pyscripts/pipeline_lineage.py): `pbip/pyscripts/pipeline_lineage.py`

### Web Edition

- [Browsable Lessons](https://github.com/ianfinkdata/sql-practice/tree/main/docs): `docs`

### Other components

- **Learner**

## Connections

- Learner → Lessons: studies (evidence: `README.md`)
- Learner → Exercises: practices with (evidence: `README.md`)
- Learner → Practice Database: queries (evidence: `README.md`)
- Lessons → Exercises: pairs with (evidence: `README.md`)
- Lessons → Practice Database: uses from Tier 3 (evidence: `README.md`)
- Practice Database → Bronze Data: contains raw tables (evidence: `README.md`)
- Practice Database → Silver Views: contains clean views (evidence: `README.md`)
- Practice Database → Gold Models: contains analytics (evidence: `README.md`)
- Database Builder → Build Config: imports settings (evidence: `project/build.py`)
- Database Builder → Customer Generator: generates data (evidence: `project/build.py`)
- Database Builder → Employee Generator: generates data (evidence: `project/build.py`)
- Database Builder → Product Generator: generates data (evidence: `project/build.py`)
- Database Builder → Sales Generator: generates data (evidence: `project/build.py`)
- Customer Generator → Dirty Data Helpers: uses helpers (evidence: `project/build_lib/generate_customers.py`)
- Employee Generator → Dirty Data Helpers: uses helpers (evidence: `project/build_lib/generate_employees.py`)
- Product Generator → Dirty Data Helpers: uses helpers (evidence: `project/build_lib/generate_products.py`)
- Sales Generator → Dirty Data Helpers: uses helpers (evidence: `project/build_lib/generate_sales.py`)
- Database Builder → Bronze Data: creates schema (evidence: `project/build.py`)
- Database Builder → Silver Views: executes SQL (evidence: `project/build.py`)
- Database Builder → Gold Models: executes SQL (evidence: `project/build.py`)
- Database Builder → Database Validation: runs checks (evidence: `project/build.py`)
- Pattern Library → Practice Database: patterns verified against (evidence: `README.md`)
- PBIP Models → TMDL Parser: parsed by
- TMDL Catalog Builder → TMDL Parser: calls parser (evidence: `pbip/pyscripts/build_tmdl_db.py`)
- Pipeline Lineage → Practice Database: queries metadata (evidence: `pbip/pyscripts/pipeline_lineage.py`)
- Pipeline Lineage → PBIP Models: extracts lineage (evidence: `pbip/pyscripts/pipeline_lineage.py`)
- Learner → Browsable Lessons: browses (evidence: `README.md`)
