0% found this document useful (0 votes)
6 views2 pages

Postgresql

Uploaded by

K H
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
0% found this document useful (0 votes)
6 views2 pages

Postgresql

Uploaded by

K H
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 2

CREATE TABLE regions (

region_id SERIAL PRIMARY KEY,


region_name VARCHAR(25) NOT NULL
);

CREATE TABLE countries (


country_id CHAR(2) PRIMARY KEY,
country_name VARCHAR(40),
region_id INTEGER,
FOREIGN KEY (region_id) REFERENCES regions(region_id)
);

CREATE TABLE locations (


location_id SERIAL PRIMARY KEY,
street_address VARCHAR(40),
postal_code VARCHAR(12),
city VARCHAR(30) NOT NULL,
state_province VARCHAR(25),
country_id CHAR(2),
CONSTRAINT loc_c_id_fk FOREIGN KEY (country_id) REFERENCES countries(country_id)
);

CREATE SEQUENCE locations_seq


START 3300
INCREMENT 100
MAXVALUE 9900
NO CYCLE;

CREATE TABLE departments (


department_id SERIAL PRIMARY KEY,
department_name VARCHAR(30) NOT NULL,
manager_id INTEGER,
location_id INTEGER,
CONSTRAINT dept_loc_fk FOREIGN KEY (location_id) REFERENCES
locations(location_id)
);

CREATE SEQUENCE departments_seq START 280 INCREMENT 10 MAXVALUE 9990 NO CYCLE;

CREATE TABLE jobs (


job_id VARCHAR(10) PRIMARY KEY,
job_title VARCHAR(35) NOT NULL,
min_salary INTEGER,
max_salary INTEGER
);

CREATE TABLE employees (


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;

You might also like