employee_id SERIAL PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(25) NOT NULL, email VARCHAR(25) NOT NULL, phone_number VARCHAR(20), hire_date DATE NOT NULL, job_id VARCHAR(10) NOT NULL, salary NUMERIC(8, 2), commission_pct NUMERIC(2, 2), manager_id INTEGER, department_id INTEGER, CONSTRAINT emp_salary_min CHECK (salary > 0), CONSTRAINT emp_email_uk UNIQUE (email), FOREIGN KEY (department_id) REFERENCES departments(department_id), FOREIGN KEY (job_id) REFERENCES jobs(job_id), FOREIGN KEY (manager_id) REFERENCES employees(employee_id) );
CREATE SEQUENCE employees_seq START 207 INCREMENT 1 NO CYCLE;
CREATE TABLE job_history (
employee_id INTEGER NOT NULL, start_date DATE NOT NULL, end_date DATE NOT NULL, job_id VARCHAR(10) NOT NULL, department_id INTEGER, CONSTRAINT jhist_employee_nn CHECK (employee_id IS NOT NULL), CONSTRAINT jhist_start_date_nn CHECK (start_date IS NOT NULL), CONSTRAINT jhist_end_date_nn CHECK (end_date IS NOT NULL), CONSTRAINT jhist_date_interval CHECK (end_date > start_date), PRIMARY KEY (employee_id, start_date), FOREIGN KEY (job_id) REFERENCES jobs(job_id), FOREIGN KEY (employee_id) REFERENCES employees(employee_id), FOREIGN KEY (department_id) REFERENCES departments(department_id) );
CREATE OR REPLACE VIEW emp_details_view AS
SELECT e.employee_id, e.job_id, e.manager_id, e.department_id, d.location_id, l.country_id, e.first_name, e.last_name, e.salary, e.commission_pct, d.department_name, j.job_title, l.city, l.state_province, c.country_name, r.region_name FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN jobs j ON j.job_id = e.job_id JOIN locations l ON d.location_id = l.location_id JOIN countries c ON l.country_id = c.country_id JOIN regions r ON c.region_id = r.region_id;