|
| 1 | +-- Sample employee database |
| 2 | +-- |
| 3 | +-- This work is licensed under the |
| 4 | +-- Creative Commons Attribution-Share Alike 3.0 Unported License. |
| 5 | +-- To view a copy of this license, visit |
| 6 | +-- http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to |
| 7 | +-- Creative Commons, 171 Second Street, Suite 300, San Francisco, |
| 8 | +-- California, 94105, USA. |
| 9 | +-- |
| 10 | +-- DISCLAIMER |
| 11 | +-- To the best of our knowledge, this data is fabricated, and |
| 12 | +-- it does not correspond to real people. |
| 13 | +-- Any similarity to existing people is purely coincidental. |
| 14 | +-- |
| 15 | + |
| 16 | +DROP DATABASE IF EXISTS employees; |
| 17 | +CREATE DATABASE IF NOT EXISTS employees; |
| 18 | +USE employees; |
| 19 | + |
| 20 | +SELECT 'CREATING DATABASE STRUCTURE' as 'INFO'; |
| 21 | + |
| 22 | +DROP TABLE IF EXISTS dept_emp, |
| 23 | + dept_manager, |
| 24 | + titles, |
| 25 | + salaries, |
| 26 | + employees, |
| 27 | + departments; |
| 28 | + |
| 29 | +/*!50503 set default_storage_engine = InnoDB */; |
| 30 | +/*!50503 select CONCAT('storage engine: ', @@default_storage_engine) as INFO */; |
| 31 | + |
| 32 | +CREATE TABLE employees ( |
| 33 | + emp_no INT NOT NULL, |
| 34 | + birth_date DATE NOT NULL, |
| 35 | + first_name VARCHAR(14) NOT NULL, |
| 36 | + last_name VARCHAR(16) NOT NULL, |
| 37 | + gender ENUM ('M','F') NOT NULL, |
| 38 | + hire_date DATE NOT NULL, |
| 39 | + PRIMARY KEY (emp_no) |
| 40 | +); |
| 41 | + |
| 42 | +CREATE TABLE departments ( |
| 43 | + dept_no CHAR(4) NOT NULL, |
| 44 | + dept_name VARCHAR(40) NOT NULL, |
| 45 | + PRIMARY KEY (dept_no), |
| 46 | + UNIQUE KEY (dept_name) |
| 47 | +); |
| 48 | + |
| 49 | +CREATE TABLE dept_manager ( |
| 50 | + emp_no INT NOT NULL, |
| 51 | + dept_no CHAR(4) NOT NULL, |
| 52 | + from_date DATE NOT NULL, |
| 53 | + to_date DATE NOT NULL, |
| 54 | + FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, |
| 55 | + FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE, |
| 56 | + PRIMARY KEY (emp_no,dept_no) |
| 57 | +); |
| 58 | + |
| 59 | +CREATE TABLE dept_emp ( |
| 60 | + emp_no INT NOT NULL, |
| 61 | + dept_no CHAR(4) NOT NULL, |
| 62 | + from_date DATE NOT NULL, |
| 63 | + to_date DATE NOT NULL, |
| 64 | + FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, |
| 65 | + FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE, |
| 66 | + PRIMARY KEY (emp_no,dept_no) |
| 67 | +); |
| 68 | + |
| 69 | +CREATE TABLE titles ( |
| 70 | + emp_no INT NOT NULL, |
| 71 | + title VARCHAR(50) NOT NULL, |
| 72 | + from_date DATE NOT NULL, |
| 73 | + to_date DATE, |
| 74 | + # FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, |
| 75 | + PRIMARY KEY (emp_no,title, from_date) |
| 76 | +); |
| 77 | + |
| 78 | +/*!50510 |
| 79 | +ALTER TABLE titles |
| 80 | +partition by range COLUMNS (from_date) |
| 81 | +( |
| 82 | + partition p01 values less than ('1985-12-31'), |
| 83 | + partition p02 values less than ('1986-12-31'), |
| 84 | + partition p03 values less than ('1987-12-31'), |
| 85 | + partition p04 values less than ('1988-12-31'), |
| 86 | + partition p05 values less than ('1989-12-31'), |
| 87 | + partition p06 values less than ('1990-12-31'), |
| 88 | + partition p07 values less than ('1991-12-31'), |
| 89 | + partition p08 values less than ('1992-12-31'), |
| 90 | + partition p09 values less than ('1993-12-31'), |
| 91 | + partition p10 values less than ('1994-12-31'), |
| 92 | + partition p11 values less than ('1995-12-31'), |
| 93 | + partition p12 values less than ('1996-12-31'), |
| 94 | + partition p13 values less than ('1997-12-31'), |
| 95 | + partition p14 values less than ('1998-12-31'), |
| 96 | + partition p15 values less than ('1999-12-31'), |
| 97 | + partition p16 values less than ('2000-12-31'), |
| 98 | + partition p17 values less than ('2001-12-31'), |
| 99 | + partition p18 values less than ('2002-12-31'), |
| 100 | + partition p19 values less than (MAXVALUE) |
| 101 | +) |
| 102 | +*/; |
| 103 | + |
| 104 | +CREATE TABLE salaries ( |
| 105 | + emp_no INT NOT NULL, |
| 106 | + salary INT NOT NULL, |
| 107 | + from_date DATE NOT NULL, |
| 108 | + to_date DATE NOT NULL, |
| 109 | + # FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, |
| 110 | + PRIMARY KEY (emp_no, from_date) |
| 111 | +); |
| 112 | + |
| 113 | +/*!50510 |
| 114 | +ALTER TABLE salaries |
| 115 | +partition by range COLUMNS (from_date) |
| 116 | +( |
| 117 | + partition p01 values less than ('1985-12-31'), |
| 118 | + partition p02 values less than ('1986-12-31'), |
| 119 | + partition p03 values less than ('1987-12-31'), |
| 120 | + partition p04 values less than ('1988-12-31'), |
| 121 | + partition p05 values less than ('1989-12-31'), |
| 122 | + partition p06 values less than ('1990-12-31'), |
| 123 | + partition p07 values less than ('1991-12-31'), |
| 124 | + partition p08 values less than ('1992-12-31'), |
| 125 | + partition p09 values less than ('1993-12-31'), |
| 126 | + partition p10 values less than ('1994-12-31'), |
| 127 | + partition p11 values less than ('1995-12-31'), |
| 128 | + partition p12 values less than ('1996-12-31'), |
| 129 | + partition p13 values less than ('1997-12-31'), |
| 130 | + partition p14 values less than ('1998-12-31'), |
| 131 | + partition p15 values less than ('1999-12-31'), |
| 132 | + partition p16 values less than ('2000-12-31'), |
| 133 | + partition p17 values less than ('2001-12-31'), |
| 134 | + partition p18 values less than ('2002-12-31'), |
| 135 | + partition p19 values less than (MAXVALUE) |
| 136 | +) |
| 137 | +*/; |
| 138 | + |
| 139 | +CREATE OR REPLACE VIEW dept_emp_latest_date AS |
| 140 | + SELECT emp_no, MAX(from_date) AS from_date, MAX(to_date) AS to_date |
| 141 | + FROM dept_emp |
| 142 | + GROUP BY emp_no; |
| 143 | + |
| 144 | +# shows only the current department for each employee |
| 145 | +CREATE OR REPLACE VIEW current_dept_emp AS |
| 146 | + SELECT l.emp_no, dept_no, l.from_date, l.to_date |
| 147 | + FROM dept_emp d |
| 148 | + INNER JOIN dept_emp_latest_date l |
| 149 | + ON d.emp_no=l.emp_no AND d.from_date=l.from_date AND l.to_date = d.to_date; |
| 150 | + |
| 151 | +flush /*!50503 binary */ logs; |
| 152 | + |
| 153 | +SELECT 'LOADING departments' as 'INFO'; |
| 154 | +source load_departments.dump ; |
| 155 | +SELECT 'LOADING employees' as 'INFO'; |
| 156 | +source load_employees.dump ; |
| 157 | +SELECT 'LOADING dept_emp' as 'INFO'; |
| 158 | +source load_dept_emp.dump ; |
| 159 | +SELECT 'LOADING dept_manager' as 'INFO'; |
| 160 | +source load_dept_manager.dump ; |
| 161 | +SELECT 'LOADING titles' as 'INFO'; |
| 162 | +source load_titles.dump ; |
| 163 | +SELECT 'LOADING salaries' as 'INFO'; |
| 164 | +source load_salaries1.dump ; |
| 165 | +source load_salaries2.dump ; |
| 166 | +source load_salaries3.dump ; |
| 167 | + |
| 168 | +source show_elapsed.sql ; |
0 commit comments