Production Relational SchemaIntermediate

Food Delivery

Restaurants, users, orders, riders and delivery events.

7 Tables30K+ RecordsJoinsDatesAggregation

Interactive SQL Playground & Query Runner

In-Browser Sandbox

Run realistic queries against the Food Delivery database. Write custom SQL or solve high-yield interview problems.

Interview Challenge:
easy

Total Restaurant Order Volumes and Spend

Summarize total orders and gross revenue generated per restaurant eatery.

GROUP BYSUMJOIN
query.sql
Press Ctrl + Enter to execute

Entity Relationship (ER) & Foreign Key Architecture

Referential integrity mappings and table cardinalities

6 Key Relations
1:NMenu Items

restaurants

eatery_id

restaurant_items

eatery_id

1:NPlaces Orders

users

diner_id

orders

diner_id

1:NPrepares Orders

restaurants

eatery_id

orders

eatery_id

1:1Dispatched Via

orders

order_id

deliveries

order_id

1:NDelivers

riders

rider_id

deliveries

rider_id

1:1Receives Review

orders

order_id

feedback

order_id

Relational Tables & Column Data Types

Field definitions, types, and primary keys for query construction

7 tables total
users
3 cols
PKdiner_id
INT
diner_name
VARCHAR(90)
neighborhood
VARCHAR(70)
restaurants
4 cols
PKeatery_id
INT
eatery_name
VARCHAR(100)
cuisine
VARCHAR(50)
rating
DECIMAL(2,1)
restaurant_items
4 cols
PKitem_id
INT
PKeatery_id
INT
item_name
VARCHAR(100)
price
DECIMAL(10,2)
orders
5 cols
PKorder_id
INT
PKdiner_id
INT
PKeatery_id
INT
ordered_at
DATETIME
order_total
DECIMAL(10,2)
riders
3 cols
PKrider_id
INT
rider_name
VARCHAR(90)
home_area
VARCHAR(70)
deliveries
5 cols
PKdelivery_id
INT
PKorder_id
INT
PKrider_id
INT
picked_at
DATETIME
delivered_at
DATETIME
feedback
4 cols
PKfeedback_id
INT
PKorder_id
INT
score
INT
note
VARCHAR(200)

Runnable DDL Setup & Seed Script

Run directly in MySQL Workbench, pgAdmin, DBeaver, or terminal

CREATE DATABASE IF NOT EXISTS studyflow_food;
USE studyflow_food;

CREATE TABLE users (
  diner_id INT PRIMARY KEY,
  diner_name VARCHAR(90) NOT NULL,
  neighborhood VARCHAR(70)
);

CREATE TABLE restaurants (
  eatery_id INT PRIMARY KEY,
  eatery_name VARCHAR(100) NOT NULL,
  cuisine VARCHAR(50),
  rating DECIMAL(2,1)
);

CREATE TABLE restaurant_items (
  item_id INT PRIMARY KEY,
  eatery_id INT,
  item_name VARCHAR(100),
  price DECIMAL(10,2),
  FOREIGN KEY (eatery_id) REFERENCES restaurants(eatery_id)
);

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  diner_id INT,
  eatery_id INT,
  ordered_at DATETIME,
  order_total DECIMAL(10,2),
  FOREIGN KEY (diner_id) REFERENCES users(diner_id),
  FOREIGN KEY (eatery_id) REFERENCES restaurants(eatery_id)
);

CREATE TABLE riders (
  rider_id INT PRIMARY KEY,
  rider_name VARCHAR(90),
  home_area VARCHAR(70)
);

CREATE TABLE deliveries (
  delivery_id INT PRIMARY KEY,
  order_id INT,
  rider_id INT,
  picked_at DATETIME,
  delivered_at DATETIME,
  FOREIGN KEY (order_id) REFERENCES orders(order_id),
  FOREIGN KEY (rider_id) REFERENCES riders(rider_id)
);

CREATE TABLE feedback (
  feedback_id INT PRIMARY KEY,
  order_id INT,
  score INT,
  note VARCHAR(200),
  FOREIGN KEY (order_id) REFERENCES orders(order_id)
);

INSERT INTO users VALUES
(1,'Ira','Malviya Nagar'),(2,'Dev','Vytilla'),(3,'Mira','Adajan'),(4,'Kabir','Vaishali Nagar');

INSERT INTO restaurants VALUES
(1,'Spice Route','Indian',4.5),(2,'Green Bowl','Healthy',4.2),(3,'Noodle Yard','Asian',4.4);

INSERT INTO restaurant_items VALUES
(1,1,'Paneer Bowl',240),(2,1,'Dal Rice',180),(3,2,'Tofu Salad',260),(4,2,'Grain Bowl',290),(5,3,'Chilli Noodles',220);

INSERT INTO orders VALUES
(1001,1,1,'2026-04-01 12:20:00',420),(1002,1,2,'2026-04-02 19:10:00',290),
(1003,2,3,'2026-04-03 20:05:00',440),(1004,3,1,'2026-04-04 13:15:00',240),
(1005,4,2,'2026-04-05 21:00:00',550);

INSERT INTO riders VALUES
(1,'Ravi','Central'),(2,'Nia','South'),(3,'Aman','West');

INSERT INTO deliveries VALUES
(1,1001,1,'2026-04-01 12:35:00','2026-04-01 13:02:00'),
(2,1002,2,'2026-04-02 19:25:00','2026-04-02 19:58:00'),
(3,1003,3,'2026-04-03 20:20:00','2026-04-03 20:55:00'),
(4,1004,1,'2026-04-04 13:30:00','2026-04-04 14:01:00');

INSERT INTO feedback VALUES
(1,1001,5,'Fast delivery'),(2,1002,4,'Good packaging'),(3,1003,5,'Hot and fresh'),(4,1004,3,'Slightly late');