Pick an SCD pattern
Pick the dimension strategy that preserves historical product prices for downstream revenue analysis.
Success signal
Commit to a decision, then compare the reasoning.
Practice data modeling
SchemaLab is the hands-on way to build data-modeling judgment. Change one thing on the canvas and watch the SQL, the checks, and the downstream pipeline react, the exact reasoning senior data interviews probe for.
No card required · See pricing
live_schema_canvas.erd
Flip one decision. Watch the SQL and the downstream pipeline react.
generated_sql.sql · regenerates from the canvas
CREATE TABLE "dim_customer" ("customer_key" UUID NOT NULL PRIMARY KEY,"customer_id" VARCHAR(64) NOT NULL,"customer_segment" TEXT);CREATE TABLE "dim_product" ("product_key" UUID NOT NULL PRIMARY KEY,"sku" VARCHAR(64) NOT NULL);CREATE TABLE "fact_order_items" ("order_item_key" UUID NOT NULL PRIMARY KEY,"customer_key" UUID NOT NULL,"product_key" UUID NOT NULL,"net_revenue" NUMERIC NOT NULL);ALTER TABLE "fact_order_items" ADD FOREIGN KEY ("customer_key") REFERENCES "dim_customer" ("customer_key");ALTER TABLE "fact_order_items" ADD FOREIGN KEY ("product_key") REFERENCES "dim_product" ("product_key");
Valid star schema
Practice loop
SchemaLab teaches causality in structures. Change the schema and the downstream readings change with it.
Start where interviewers start: what one row means, which dimensions explain it, and where history belongs.
The ERD drives generated SQL, lifecycle readings, storage trade-offs, and deterministic checks from one state.
Layer 3 reviews judgment after the deterministic checks, so feedback stays grounded in the model you built.
1. ERD
fact_order_items -> dimensions
Foreign-key direction stays visible on the canvas.
2. SQL
regenerates from state
Postgres output follows the model, not a separate editor.
3. Checks
keys, grain, history
Layer 1 and 2 are deterministic instrument readings.
4. Readiness
evidence over guesswork
Progress is tied to solved concepts and verdict history.
Challenge previews
Start with constrained decisions, move into schema builds, then take open scenarios where the answer is a defensible model.
Pick the dimension strategy that preserves historical product prices for downstream revenue analysis.
Success signal
Commit to a decision, then compare the reasoning.
Extend a starter fact table with a dimension that supports accurate historical price analysis.
Success signal
Build the model before opening any authored approach.
Resolve a subscriber-to-campaign many-to-many relationship without losing enrollment detail.
Success signal
Build the model before opening any authored approach.
Starter concept coverage
Learners identify stable row identity and mark the correct column or column set as the primary key.
Learners connect entities through explicit referenced keys instead of informal naming conventions.
Learners show the expected one-to-one, one-to-many, or many-to-many shape for a given business relationship.
Learners recognize when a direct relationship needs an associative structure rather than a naive single FK.
Learners restructure tables so each fact is stored once, and judge when denormalization is the right trade.
Learners separate measurable events from descriptive context instead of collapsing everything into one table.
Learners make the row-level meaning of a fact table explicit before adding measures and relationships.
Learners use synthetic identifiers where versioned dimensional history or stable warehouse joins require them.
Learners keep transaction-level identifiers on the fact when a separate dimension adds no analytical value.
Learners preserve historical dimensional states by versioning rows rather than overwriting them.