0% found this document useful (0 votes)
6 views

Postgresql

Uploaded by

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

Postgresql

Uploaded by

K H
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
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