JO
josafaenrique/homeware-market-db
Designed and implemented a 3NF schema (9 entities) with Table-per-Type inheritance, plus 2 analytical views, 2 stored procedures, and a trigger enforcing stock validation and price stamping. Includes seed data and a Docker setup with Adminer for quick demo.
Second-hand Homeware Marketplace Database (MySQL 8)
Relational database designed and implemented for an e-commerce scenario (Advanced Databases module).
Covers end-to-end: 3NF schema (9 entities, Table-per-Type inheritance), views, stored procedures, trigger, and indexing.
Features
- 3NF schema with 9 entities:
user,category,homeware_items,furniture,utensils,decorative_items,shipping,orders,order_items - TPT inheritance:
homeware_itemsparent;furniture,utensils,decorative_itemsas subtypes - Business logic in DB:
- Views:
user_order_summary,item_inventory_report - Stored Procedures:
create_new_order,update_item_price - Trigger:
before_order_item_insert(validates stock + stamps unit_price)
- Views:
- Indexing: example
idx_item_nameonhomeware_items(name)(add as needed) - Seed data for quick demo
Quickstart (without Docker)
- Start a local MySQL 8 server.
- Create a database:
CREATE DATABASE homeware_market CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE homeware_market;
- Run scripts in order:
SOURCE sql/schema.sql; SOURCE sql/seed.sql; SOURCE sql/views.sql; SOURCE sql/procedures.sql; SOURCE sql/triggers.sql;
- Try a few queries:
SELECT * FROM user_order_summary; SELECT * FROM item_inventory_report; CALL update_item_price(1, 99.99, 1, @status); SELECT @status; SET @order_id = 0; CALL create_new_order(2, 1, 2, 1, @order_id); SELECT @order_id;
Quickstart (with Docker + Adminer)
- Install Docker Desktop.
- From the repo root:
docker compose up -d
- Open Adminer at http://localhost:8080 and connect:
- System: MySQL
- Server: db
- User: root
- Password: root
- Database: homeware_market
- Import scripts from the
sql/folder (schema, seed, views, procedures, triggers).
ERD
Export your ERD as docs/ERD.png and reference it here:

Example EXPLAIN
See scripts/explain_examples.sql for sample EXPLAIN on common queries.
Notes
- The stored procedures and trigger here are functional reconstructions aligned with the original assignment intent (order creation, price updates, stock validation).
- For production, add: FK indexes, error handlers with rollback, and explicit referential actions (
ON DELETE/UPDATE).
License
MIT
On this page
Contributors
Other
Created September 3, 2025
Updated September 3, 2025