# Database Schema
+ Name: lab
+ Tables
```sql
set @@allow_auto_random_explicit_insert = true;
```

```sql
-- DROP TABLE IF EXISTS lab.courses; 
CREATE TABLE lab.courses(
  course_id VARCHAR(30) PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  nonplayground_lab INT NOT NULL
);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('dba_101', 'TiDB Essentials', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('201.1', 'Introduction to TiDB', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('dev_201.2', 'Learn SQL with TiDB', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('201.3', 'TiDB Workshop for MySQL Users', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('dev_201.4_java', 'Working with TiDB from Java', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('dev_201.4_python', 'Working with TiDB from Python', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('dev_201.4_php', 'Working with TiDB from PHP', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('dba_303', 'TiDB Database Administration for Self-Hosted Deployment', 1);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('307', 'TiDB SQL Tuning', 1);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('bc_01', 'TiDB Cloud Kickstart Workshop', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('701', 'TiDB Cloud Security', 0);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('qdk','Quick Demo Kits',1);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('serverless','Quick Demo Kits - Serverless Only',1);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('irk','Issue Reproducing Kits',1);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('summit', 'HTAP Summit Workshop', 1);
INSERT INTO lab.courses (course_id, name, nonplayground_lab) VALUES ('imd', 'AWS Immersion Day', 1);
```

```sql
-- DROP TABLE IF EXISTS lab.labs;
CREATE TABLE lab.labs(
  lab_id BIGINT PRIMARY KEY AUTO_RANDOM,
  course_id VARCHAR(100) NOT NULL REFERENCES lab.courses (course_id),
  name VARCHAR(100) NOT NULL,
  cost_per_user_per_day_in_usd NUMERIC NOT NULL, 
  cost_per_user_total_in_usd NUMERIC NOT NULL
);
INSERT INTO lab.labs (course_id, name, cost_per_user_per_day_in_usd, cost_per_user_total_in_usd) VALUES ('dba_303', 'Labs for TiDB Administration for Self-Hosted Deployment', 60.0, 180.0);
INSERT INTO lab.labs (course_id, name, cost_per_user_per_day_in_usd, cost_per_user_total_in_usd) VALUES ('307', 'Labs for TiDB SQL Tuning', 60.0, 180.0);
```
```sql
-- DROP TABLE IF EXISTS lab.regions;
CREATE TABLE lab.regions(
  region_id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  code VARCHAR(20) NOT NULL
);
INSERT INTO lab.regions (region_id, name, code) VALUES (1, 'oregon', 'us-west-2');
INSERT INTO lab.regions (region_id, name, code) VALUES (2, 'tokyo', 'ap-northeast-1');
INSERT INTO lab.regions (region_id, name, code) VALUES (3, 'singapore', 'ap-southeast-1');
INSERT INTO lab.regions (region_id, name, code) VALUES (4, 'frankfurt', 'eu-central-1');
INSERT INTO lab.regions (region_id, name, code) VALUES (5, 'singapore_zh', 'ap-southeast-1');
```
```sql
-- DROP TABLE IF EXISTS lab.times;
CREATE TABLE lab.times(
  time_id BIGINT PRIMARY KEY AUTO_RANDOM,
  year_start INT NOT NULL,
  month_start INT NOT NULL,
  date_start INT NOT NULL,
  days INT NOT NULL,
  timezone INT NOT NULL,
  description VARCHAR(200)
);
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (1, 2024, 3, 5, 3, 8, 'APAC 2nd Public Training');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (2017612633062012209, 2023, 12, 1, 365, 8, 'PE Internal Testing');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (2305843009213813953, 2024, 3, 21, 2, 11, 'APAC test Public Training #1 - Course 303');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (2594073385365495697, 2024, 3, 25, 5, -6, 'NA 1st Public Training - Course 303');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (4035225266124024417, 2024, 1, 13, 3, 8, 'PE External Testing #1');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (5764607523034264881, 2023, 12, 25, 365, 8, 'Lab Control Security Testing');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (5476377146882703137, 2024, 6, 3, 5, 8, 'APAC Public Training');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (2, 2024, 6, 17, 5, -6, 'NA Public Training');
INSERT INTO lab.times (time_id, year_start, month_start, date_start, days, timezone, description) VALUES (3, 2024, 6, 16, 5, 8, 'APAC Public Training');
```
```sql
-- DROP TABLE lab.orders;
CREATE TABLE lab.orders(
  order_id BIGINT PRIMARY KEY AUTO_RANDOM,
  business_region VARCHAR(20) NOT NULL,
  placed_by VARCHAR(100) NOT NULL,
  planned_time_id BIGINT NOT NULL REFERENCES lab.times (time_id),
  amount NUMERIC NOT NULL
);
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (1441151880758618721, 'VIRTUAL', 'guanglei.bao@pingcap.com', 2594073385365495697, '0.0');
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (3458764513820570929, 'VIRTUAL', 'guanglei.bao@pingcap.com', 4035225266124024417, '0.0');
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (5188146770730811393, 'VIRTUAL', 'guanglei.bao@pingcap.com', 5764607523034264881, '0.0');
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (6341068275337748369, 'VIRTUAL', 'guanglei.bao@pingcap.com', 2017612633062012209, '0.0');
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (8358680908399760577, 'VIRTUAL', 'guanglei.bao@pingcap.com', 5476377146882703137, '0.0');
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (17, 'VIRTUAL', 'guanglei.bao@pingcap.com', 2, '0.0');
INSERT INTO lab.orders (order_id, business_region, placed_by, planned_time_id, amount) VALUES (18, 'VIRTUAL', 'guanglei.bao@pingcap.com', 3, '0.0');
```
```sql
-- DROP TABLE IF EXISTS lab.trainers;
CREATE TABLE lab.trainers(
  trainer_id BIGINT PRIMARY KEY AUTO_RANDOM,
  last_name VARCHAR(50) NOT NULL,
  first_name VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL,
  password_hash VARCHAR(100) NOT NULL,
  password_need_change INT NOT NULL,
  organization VARCHAR(100) NOT NULL
);
ALTER TABLE lab.trainers ADD INDEX (email);
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (6, 'Wong', 'Lynn', 'lynnwang0220@gmail.com', '6427ee12d39c7caaa52ead082737c6a1ac14738e4ee4339957d90ccbd122e461', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (7205759403792793602, 'Zhang', 'Hao', '1793033023@qq.com', '6564ab156e92203f40692fa825a5f16a6ba013a62f68b1bab89261f8b0fe7bb9', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (1, 'Bao', 'Todd', 'toddbgl@hotmail.com', 'c41a5a542a40bcd45029dd49be7cbe08574f86bb850b26157f2617b2a27c92d6', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (4, 'Chen', 'Wayne', 'bella_yaoyao@163.com', 'dbaf0148f0b8106ac185509fddf001393d3206fe588f8da50d149776fdd5afa0', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (1441151880758588721, 'Feng', 'Shuai', '945946609@qq.com', 'c6b608b4e1a2f50eb28e9f64cb6d849e0c4982709bb428798c8b5a1eaeb68d19', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (2, 'Huang', 'Tony', 'chenhao.tony.huang@gmail.com', '5bf37539577f39b99de49e1b041bd65fde408620684812d6bfc1e0e43305829e', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (3 'Dong', 'Fei', 'todongfei@gmail.com', '7ec4f7f16339bfa846b1005913862a46312479de009797600a2ebcd7555b6d41', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (8, 'Honda', 'Yasuo', 'yasuo.honda@gmail.com', 'fc6a68864330e0eddee0a95f2acd0abc2e24b0ea9757edc5ebee5afb7121a366', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (10, 'Dillard', 'Sam', 'samhdillard@gmail.com', '2b02e0033454a25ba6c1ba6e4ec1520f1765278d0fb2d4a7e19c8264fa820f3f', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (5, 'Bogaard', 'Sean', 's.bogaard@yahoo.com', 'e35cf3cabcb66a872fcbc3d846226611867b70f4d9ac46d5f6447994a1ac9f5e', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (6341068275337808369, 'Jiang', 'Ming', 'oscarjiangming@qq.com', '5ec7df2b9bd0577f43388e44a3536e637b2a91f426211b2509f74a058a94a7a9', 0, 'Community');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (1152921504606996978, 'Yan', 'Shaoan', 'admin@shawnyan.cn', 'efee98f58c71300962ea984d037230819028170eece2cdcaa7ffe91dd99c5604', 0, 'Community');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (8358680908399790579, 'Yang', 'Eva', 'eva.yang@ce-service.com.cn', '26c2117b0b04fbfcbfc3d95b80d4678f022dcc4aed9548c92ccd3bf7f3aeeea1', 0, 'Community');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (6341068275337838369, 'Huang', 'Tony', 'chenhao_huang@163.com', '732fdd349d6c380bab417bfe1983936d107974bda97cb2924d558f0cbab24f60', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (5188146770731021393, 'Allen', 'Brian', 'brian.allen@feedonomics.com', '0e60e958c75960f7053176500ddbcfba01cbd0f60e4a2656e859dd6206b805c8', 0, 'Feedonomics');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (7205759403793003602, 'McGee', 'Matthew', 'matt.mcgee@feedonomics.com', 'bfbd14a86213daf6fdbe852af8ab40f49a38461211f5e1117dcddc1db966e114', 0, 'Feedonomics');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (4611686018427597907, 'Shen', 'Catherine', 'cshen@plaid.com', '3c9c9bdc6aefbcd95839a666498c7550e24bf47350208d1e0938e0ff12b68bb0', 0, 'Plaid');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (4035225266124174420, 'Hodawadekar', 'Prakash', 'prakash.h.25@gmail.com', 'f231b8ce709f5d9c0803b6e33145417b783558cb52a0df32d5576537ef168e13', 0, 'N/A');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (5476377146882763137, 'Baranov', 'Pavel', 'pavel@statsocial.com', '849d69f99bcd6d17a940521cd743805c111f6d0ca6a6f6e6d89f563db3db4b13', 0, 'StatSocial');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (5476377146882793137, 'Slabaugh', 'David', 'dslabaugh@marqeta.com', '81aef632348f2f01a9e77c9a1d591b13ce105f11862db547ab233c7c855eb6a2', 0, 'Marqeta');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (270002, 'Yang', 'Lanqing', 'eyang@roblox.com', '849cd7b48ad1b97627f058c0439672a3b4a30607b48f90b87ff40ad2774bda31', 0, 'Roblox');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (6341068275337958369, 'Tadatoshi', 'Sekiguchi', 'bohnen.net@gmail.com', 'e78f0cbfac7eed2df6011a2d8f66454d886839e0dc9614b88fac2b11e127301a', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (100, 'Cong', 'Nguyen Thanh', 'cong.nguyen@hyperlogy.com', 'a6ceb550650f614daf581fcc192b8ac7184f6b58822b3e189835222d806c0710', 0, 'Hyperlogy');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (101, 'Ha', 'Vo Ngoc', 'ha.vo@hyperlogy.com', 'a834f99be0a8ca254c6dff02b6bed4033df1be07cee4151ecfc7e18f580695b0', 0, 'Hyperlogy');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (102, 'Tuan', 'Nguyen Ngoc', 'tuan.nguyen@hyperlogy.com', 'c03f3b342f0a7dc73abbeeb04af314a1a535056b438463f2bab3ee6b5485b75c', 0, 'Hyperlogy');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (103, 'Cuong', 'Nguyen Hung', 'cuong.nguyen@hyperlogy.com', 'ff4058a16e289ce93947780a5d62fc9c4f3d530fe62b7633f95eece85d4d609e', 0, 'Hyperlogy');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (104, 'Anggara', 'Oryza', 'oryza.anggara@ivteknologi.com', '1098917cfd63b4f91787ba693717071fa3957d1469d7eaf9bfafceff61790796', 0, 'Ivatama Teknologi');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (105, 'Clarissa', 'Clarissa', 'clarissa@ivteknologi.com', 'bcb40db075f36788f4abd98bdeb4fda40b46425100e2ef8ab820f6e4bd6dc517', 0, 'Ivatama Teknologi');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (106, 'Regita', 'Nurwanto', 'nurwanto@ivteknologi.com', '30544cf641df46efb3eac66ccf35f70654cce0fb6e87992d776f14a09016cfc5', 0, 'Ivatama Teknologi');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (107, 'Achmadi', 'Johari ', 'johari@ivteknologi.com', '53086af536694cc7bf190f000f6be4197c11c329bf6658adc570fc32e7c48921', 0, 'Ivatama Teknologi');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (108, 'Utama', 'Muhammad Satria Yuda', 'satria@cloud-ace.com', '0cb12c8b63f69d02029961e6a3dc8067edb72a25599ca5778f9438ef922fc34e', 0, 'Cloud Ace Integra');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (109, 'Fatwanto', 'Yoga', 'yoga.fatwanto@cloud-ace.com', '26a4270542cc613328fb655eeb1ee99d1ca30bc4db49d0613952511057c1014e', 0, 'Cloud Ace Integra');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (110, 'Martiano', 'Herfi Fani', 'herfi.martiano@cloud-ace.com', 'b2d807f72ea4ed0fe0c67c7eee12101c76322b44506caddc87e4ca1af8c0e828', 0, 'Cloud Ace Integra');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (111, 'Adi', 'Nugroho', 'nugroho@cloud-ace.com', '45118230bb06ec9addf8e962674d7c0272dc8614c3e0a3148ab0486299466003', 0, 'Cloud Ace Integra');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (112, 'Bintarto', 'Nanda Permana Putra Bintarto', 'nanda.bintarto@sisindokom.com', 'c86a2298e269e25ebcbfaec795dea6acc568b37b056743e8d3c8dbac3ccf84f8', 0, 'Sisindokom/Astel');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (113, 'Fernando', 'Ivan', 'ivan.fernando@sisindokom.com', 'e8cf91b580b34af3975c5e66355cb97b474fa7b6528ee31c9c9225fa3fb61f24', 0, 'Sisindokom/Astel');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (114, 'Wijaya', 'Budi', 'budi.wijaya@sisindokom.com', '92dd3e35a35325d647a8d0690bc2500cb33e4f243f488133c5418b8d68569e94', 0, 'Sisindokom/Astel');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (115, 'Putra', 'Kalis', 'kalis.putra@sisindokom.com', 'c10e9aa54c7a36473c01f64d6622cfcf56492a4447347da8181e187636c227c6', 0, 'Sisindokom/Astel');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (116, 'Shaw', 'Subi', 'subi0430@gmail.com', '936ad00b143db013c0e993323c373762d95861ff5b0e8e568417f1a2ae5f675b', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (117, 'Arriola', 'Joseph', 'joseph.arriola.eng@gmail.com', '470664bbd6740954ba37c0d91e17d7cd58191a5c7733e8c0528623cedabe5b9f', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (118, 'Barrios', 'Ruben', 'rabarrios25@gmail.com', '2585bf795bb4ae3c9ea8b5be1eed15e3aafc45b3297300584824e2d7bcdcc7aa', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (119, 'Penaroza', 'Matthew', 'penarozamatthew@gmail.com', '8ed21e2cd043970455f602b25170a5ee32c914202a9e72ac85f5209aefb55271', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (120, 'Ding', 'Xiong', 'xiong@ziphq.com', '9a9dae2249d12b82573332c26015f84c3124f38a772bdc75d9763efdc3cb7cbc', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (121, 'Zhang', 'Michael', 'mzhang5@gmail.com', '0ab147b3fe84421392a9ba9eff4641fb95113c41c58f5cb80d78486cd5e4d4fd', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (122, 'Ho', 'Wai', 'wai.ho@icloud.com', 'dbbcb8d79880976f530a164005f256ccf9429d423764358a53167e0b36872275', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (123, 'Truong', 'Nguyen Van', 'nguyen.van.truong@vsi-international.com', '74085b70d424604fe77f7ee83f9988f27a7900f961ae350e5b9c9895ceafc39f', 0, 'VietSoftware International');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (124, 'Cuong', 'Dao Manh', 'dao.manh.cuong@vsi-international.com', 'a52fca1f0bd32d01f1649dfbaa095ddb041232e7c602173f656c65276b9cb688', 0, 'VietSoftware International');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (125, 'Dat', 'Nguyen Thanh', 'nguyen.thanh.dat@vsi-international.com', 'b7a9a9af11316fe125cc248ef6819b9f3b7fa4bcec6a320b83e1e869d8fa2ea7', 0, 'VietSoftware International');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (126, 'Khai', 'Pham Van', 'pham.van.khai@vsi-international.com', 'b166da0d071d076b5c62af52fa324ab740eefdab4e33ca23529082fe08ff5a72', 0, 'VietSoftware International');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (127, 'Chandra', 'Ivan', 'ivanchandra@yahoo.com', 'bf1a7ecec79cc20df890ec125e11180bf246f4f122f5f16a783f20320c6cc881', 0, 'PingCAP');
INSERT INTO lab.trainers (trainer_id, last_name, first_name, email, password_hash, password_need_change, organization) VALUES (128, 'Yang', 'Yingkui', 'yingkunyyk@outlook.com', 'f375e286c07d08a28c2f166ae7bc601b91c0116f3a6c41066114f0c156a7ec62', 0, 'PingCAP');


```
```sql
-- DROP TABLE lab.delivery_instances;
CREATE TABLE lab.delivery_instances(
  trainer_id BIGINT NOT NULL REFERENCES lab.trainers (trainer_id),
  time_id BIGINT NOT NULL REFERENCES lab.times (time_id),
  course_id VARCHAR(30) NOT NULL REFERENCES lab.courses (course_id),
  region_id INT NOT NULL REFERENCES lab.regions (region_id),
  order_id BIGINT NOT NULL REFERENCES lab.orders (order_id),
  description VARCHAR(500)
);
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (10, 5764607523034264881, 'qdk', 4, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (4, 5764607523034264881, 'dba_303', 1, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (864691128455135235, 5764607523034264881, 'dba_303', 3, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (864691128455135235, 5764607523034264881, 'qdk', 1, 5188146770730811393, 'For partner testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (2305843009213693953, 5764607523034264881, 'dba_303', 1, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (7205759403792793602, 5764607523034264881, 'dba_303', 1, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (5188146770730871393, 5764607523034264881, 'dba_303', 3, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (4899916394579159650, 5764607523034264881, 'dba_303', 1, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (7205759403792883601, 5764607523034264881, 'dba_303', 2, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (7782220156096337089, 5764607523034264881, 'dba_303', 1, 5188146770730811393, 'For testing and demo purposes.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (1152921504606996978, 4035225266124024417, 'dba_303', 1, 3458764513820570929, 'For testing 303 lab by external users.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (6341068275337808369, 4035225266124024417, 'dba_303', 1, 3458764513820570929, 'For testing 303 lab by external users.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (8358680908399790579, 4035225266124024417, 'dba_303', 1, 3458764513820570929, 'For testing 303 lab by external users.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (6341068275337838369, 2305843009213813953, 'dba_303', 3, 3458764513820570929, 'For testing 303 lab by Tony personal account.');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (5188146770731021393, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (7205759403793003602, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (4611686018427597907, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (4035225266124174420, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (5476377146882763137, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (270002, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (5476377146882793137, 2594073385365495697, 'dba_303', 1, 1441151880758618721, 'NA Public Training Pilot');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (7205759403792883601, 5764607523034264881, 'qdk', 3, 5188146770730811393, 'Workshop Testing');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (6341068275337958369, 5764607523034264881, 'qdk', 2, 5188146770730811393, 'Workshop Testing');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (100, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (101, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (102, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (103, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (104, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (105, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (106, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (107, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (108, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (109, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (110, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (111, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (112, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (113, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (114, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (115, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (116, 5476377146882703137, 'dba_303', 3, 8358680908399760577, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (117, 2, 'dba_303', 1, 17, 'NA Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (118, 2, 'dba_303', 1, 17, 'NA Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (119, 2, 'dba_303', 1, 17, 'NA Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (120, 2, 'dba_303', 1, 17, 'NA Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (121, 2, 'dba_303', 1, 17, 'NA Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (122, 2, 'dba_303', 1, 17, 'NA Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (123, 3, 'dba_303', 3, 18, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (124, 3, 'dba_303', 3, 18, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (125, 3, 'dba_303', 3, 18, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (126, 3, 'dba_303', 3, 18, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (127, 3, 'dba_303', 3, 18, 'APAC Public Training');
INSERT INTO lab.delivery_instances (trainer_id, time_id, course_id, region_id, order_id, description) VALUES (128, 3, 'dba_303', 3, 18, 'APAC Public Training');
```
```sql
-- DROP TABLE IF EXISTS lab.logs;
CREATE TABLE lab.logs(
  trainer_email VARCHAR(100) NOT NULL REFERENCES lab.trainers (email),
  lab_name VARCHAR(50) NOT NULL,
  action_name VARCHAR(200) NOT NULL,
  action_time DATETIME NOT NULL
);
```
```sql
-- DROP TABLE IF EXISTS lab.feedbacks;
CREATE TABLE lab.feedbacks(
  trainer_email VARCHAR(100) NOT NULL REFERENCES lab.trainers (email),
  lab_name VARCHAR(50) NOT NULL,
  rating_score INT NOT NULL,
  last_feedback_time DATETIME NOT NULL,
  comment VARCHAR(800) DEFAULT 'N/A',
  PRIMARY KEY (trainer_email, lab_name)
);
```
```sql
-- DROP TABLE IF EXISTS lab.issue_reproducers;
CREATE TABLE lab.issue_reproducers(
  login_email VARCHAR(100) PRIMARY KEY,
  department_name VARCHAR(50) NOT NULL,
  group_name VARCHAR(50) NOT NULL,
  job_role VARCHAR(50) NOT NULL,
  cost_center VARCHAR(50) NOT NULL,
  comment VARCHAR(500) NOT NULL
);
```
```sql
DROP TABLE IF EXISTS lab.serverless_main_clusters;
CREATE TABLE lab.serverless_main_clusters(
  main_cluster_id VARCHAR(50) PRIMARY KEY,
  organization_id VARCHAR(100) NOT NULL,
  project_id VARCHAR(100) NOT NULL,
  region_name VARCHAR(50) NOT NULL,
  cluster_name VARCHAR(100) NOT NULL,
  cluster_host VARCHAR(200) NOT NULL,
  cluster_port VARCHAR(30) NOT NULL,
  admin_name VARCHAR(50) NOT NULL,
  admin_password VARCHAR(50) NOT NULL
);
INSERT INTO lab.serverless_main_clusters (main_cluster_id, organization_id, project_id, region_name, cluster_name, cluster_host, cluster_port, admin_name, admin_password) VALUES ('10571062124032755015', '1372813089209031814', '1372813089454311305', 'oregon', 'oregon-c1', 'gateway01.us-west-2.prod.aws.tidbcloud.com', '4000', '2fm6C4a7c9ztvf2.root', 'odThGqH12FqldNMh');
INSERT INTO lab.serverless_main_clusters (main_cluster_id, organization_id, project_id, region_name, cluster_name, cluster_host, cluster_port, admin_name, admin_password) VALUES ('10538914940695109996', '1372813089209031814', '1372813089454311305', 'tokyo', 'tokyo-c1', 'gateway01.ap-northeast-1.prod.aws.tidbcloud.com', '4000', '2PiBSb7d43bJot5.root', 'IbaclN2fm2aoGzEo');
INSERT INTO lab.serverless_main_clusters (main_cluster_id, organization_id, project_id, region_name, cluster_name, cluster_host, cluster_port, admin_name, admin_password) VALUES ('10007616363610150742', '1372813089209031814', '1372813089454311305', 'frankfurt', 'frankfurt-c1', 'gateway01.eu-central-1.prod.aws.tidbcloud.com', '4000', 'z3qpAG6uKx9zaAS.root', 'k85SmCi7PcvkGUt5');
INSERT INTO lab.serverless_main_clusters (main_cluster_id, organization_id, project_id, region_name, cluster_name, cluster_host, cluster_port, admin_name, admin_password) VALUES ('10889262795211641334', '1372813089209031814', '1372813089454311305', 'singapore', 'singapore-c1', 'gateway01.ap-southeast-1.prod.aws.tidbcloud.com', '4000', '3rcr12fqHXX4MAa.root', 'int0R7zgHP2iXH5i');

```
```sql
DROP TABLE IF EXISTS lab.serverless_branch_clusters;
CREATE TABLE lab.serverless_branch_clusters(
  branch_cluster_id VARCHAR(50) NOT NULL,
  main_cluster_id VARCHAR(50) NOT NULL REFERENCES lab.serverless_main_clusters (main_cluster_id),
  region_name VARCHAR(50) NOT NULL,
  cluster_name VARCHAR(100) NOT NULL,
  cluster_host VARCHAR(200) NOT NULL,
  cluster_port VARCHAR(30) NOT NULL,
  admin_name VARCHAR(50) NOT NULL,
  admin_password VARCHAR(50) NOT NULL,
  in_use CHAR(1) NOT NULL,
  check_out_time DATETIME,
  create_time DATETIME,
  trainer_tag VARCHAR(100),
  PRIMARY KEY (cluster_name, main_cluster_id, branch_cluster_id)
);
CREATE INDEX trainer_tag_idx ON lab.serverless_branch_clusters (trainer_tag);
CREATE INDEX in_usage_idx ON lab.serverless_branch_clusters (in_use, region_name);

```

```sql
-- Trainer's Cranch Cluster Query
SELECT branch_cluster_id, cluster_name, cluster_host, cluster_port, admin_name, admin_password, in_use
FROM lab.serverless_branch_clusters
WHERE in_use = 'Y' AND trainer_tag = 'toddbgl-hotmail-com' AND region_name = 'oregon';
-- Checkout Query
BEGIN;
SELECT branch_cluster_id, cluster_name, cluster_host, cluster_port, admin_name, admin_password, in_use
FROM lab.serverless_branch_clusters
WHERE in_use = 'N' AND region_name='oregon'
LIMIT 1
FOR UPDATE;
-- Checkout
UPDATE lab.serverless_branch_clusters
SET in_use = 'Y', trainer_tag = 'toddbgl-hotmail-com', check_out_time = NOW()
WHERE branch_cluster_id = 1;
COMMIT;
-- Checkin

```
```sql
-- All courses
SELECT * FROM lab.courses ORDER BY course_id, name;
-- All labs
SELECT * FROM lab.labs ORDER BY name;
-- All regions
SELECT * FROM lab.regions ORDER BY region_id;
-- All times
SELECT * FROM lab.times ORDER BY year_start, month_start, date_start;
-- All trainers
SELECT * FROM lab.trainers ORDER BY trainer_id;
-- Recent classes report
SET @RECENT_CLASS_COUNT=5;
SELECT *
FROM (
  SELECT
    DENSE_RANK() OVER(ORDER BY y.year_start DESC, y.month_start DESC, y.date_start DESC, y.timezone DESC) AS recent,
    o.order_id,
    d.course_id, r.name, d.description,
    CONCAT(t.first_name,CONCAT(' ',t.last_name)) attendance, t.email, t.organization,
    y.year_start, y.month_start, y.date_start, y.days, y.timezone
  FROM
    delivery_instances d 
    JOIN trainers t ON d.trainer_id = t.trainer_id
    JOIN times y ON d.time_id = y.time_id
    JOIN regions r on d.region_id = r.region_id
    JOIN orders o on d.order_id = o.order_id
  ) s
WHERE recent <= @RECENT_CLASS_COUNT
ORDER BY s.year_start DESC, s.month_start DESC, s.date_start DESC, s.timezone DESC;
```
```sql feedback report
SELECT
  trainer_email participant, 
  CASE lab_name
    WHEN 'dba_303_lab_ff0' THEN 'Lab 1' 
    WHEN 'dba_303_lab_ff1' THEN 'Lab 2'
    WHEN 'dba_303_lab_ff2' THEN 'Lab 3'
    WHEN 'dba_303_lab_ff3' THEN 'Lab 4'
    WHEN 'dba_303_lab_ff4' THEN 'Lab 5'
    WHEN 'dba_303_lab_ff5' THEN 'Lab 6'
    WHEN 'dba_303_lab_ff6' THEN 'Lab 7'
    WHEN 'dba_303_lab_ff7' THEN 'Lab 8'
    WHEN 'dba_303_lab_ff8' THEN 'Lab 9'
    WHEN 'dba_303_lab_ff9' THEN 'Lab 10'
    WHEN 'dba_303_lab_ff10' THEN 'Lab 11'
    WHEN 'dba_303_lab_ff11' THEN 'Lab 12'
    WHEN 'dba_303_lab_ff12' THEN 'Lab 13'
    WHEN 'dba_303_lab_ff13' THEN 'Lab 14'
    ELSE lab_name
  END AS lab_name, 
  rating_score
FROM feedbacks
ORDER BY last_feedback_time DESC, lab_name;

```
```sql Q active users
SELECT
  trainer_email as user,
  lab_name,
  COUNT(action_name) as lab_start_count,
  MAX(DATE(action_time)) as q_latest_action_date,
  MIN(DATE(action_time)) as q_first_action_date
FROM logs
WHERE 
  action_name LIKE 'start%'
  AND action_time > NOW() - INTERVAL '120' DAY
GROUP BY user, lab_name
ORDER BY MAX(DATE(action_time)) DESC, lab_start_count DESC;

```