0% found this document useful (0 votes)
2 views5 pages

04 others

The document outlines SQL commands for creating indexes on various tables, implementing a procedure and trigger to restrict DML operations during business hours, and adding comments to describe the purpose and structure of tables and columns in a database. It includes specific procedures for managing job history and securing data modifications. The document concludes with a series of comments that provide detailed descriptions of the tables and their respective columns.

Uploaded by

ambarishan2505
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views5 pages

04 others

The document outlines SQL commands for creating indexes on various tables, implementing a procedure and trigger to restrict DML operations during business hours, and adding comments to describe the purpose and structure of tables and columns in a database. It includes specific procedures for managing job history and securing data modifications. The document concludes with a series of comments that provide detailed descriptions of the tables and their respective columns.

Uploaded by

ambarishan2505
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

/*

04 Others
Perform other steps after populating data, such as indexes and comments
*/

CREATE INDEX emp_department_ix


ON employees (department_id);

CREATE INDEX emp_job_ix


ON employees (job_id);

CREATE INDEX emp_manager_ix


ON employees (manager_id);

CREATE INDEX emp_name_ix


ON employees (last_name, first_name);

CREATE INDEX dept_location_ix


ON departments (location_id);

CREATE INDEX jhist_job_ix


ON job_history (job_id);

CREATE INDEX jhist_employee_ix


ON job_history (employee_id);

CREATE INDEX jhist_department_ix


ON job_history (department_id);

CREATE INDEX loc_city_ix


ON locations (city);

CREATE INDEX loc_state_province_ix


ON locations (state_province);

CREATE INDEX loc_country_ix


ON locations (country_id);

COMMIT;

/*
procedure and statement trigger to allow dmls during business hours:
*/

CREATE OR REPLACE PROCEDURE secure_dml


IS
BEGIN
IF TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00'
OR TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN
RAISE_APPLICATION_ERROR (-20205,
'You may only make changes during normal office hours');
END IF;
END secure_dml;
/
CREATE OR REPLACE TRIGGER secure_employees
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
secure_dml;
END secure_employees;
/

ALTER TRIGGER secure_employees DISABLE;

/*
procedure to add a row to the JOB_HISTORY table and row trigger
to call the procedure when data is updated in the job_id or
department_id columns in the EMPLOYEES table:
*/

CREATE OR REPLACE PROCEDURE add_job_history


( p_emp_id job_history.employee_id%type
, p_start_date job_history.start_date%type
, p_end_date job_history.end_date%type
, p_job_id job_history.job_id%type
, p_department_id job_history.department_id%type
)
IS
BEGIN
INSERT INTO job_history (employee_id, start_date, end_date,
job_id, department_id)
VALUES(p_emp_id, p_start_date, p_end_date, p_job_id, p_department_id);
END add_job_history;
/

CREATE OR REPLACE TRIGGER update_job_history


AFTER UPDATE OF job_id, department_id ON employees
FOR EACH ROW
BEGIN
add_job_history(:old.employee_id, :old.hire_date, sysdate,
:old.job_id, :old.department_id);
END;
/

COMMIT;

/*
Add comments to tables and columns
*/

COMMENT ON TABLE regions


IS 'Regions table that contains region numbers and names. Contains 4 rows;
references with the Countries table.';

COMMENT ON COLUMN regions.region_id


IS 'Primary key of regions table.';

COMMENT ON COLUMN regions.region_name


IS 'Names of regions. Locations are in the countries of these regions.';

COMMENT ON TABLE locations


IS 'Locations table that contains specific address of a specific office,
warehouse, and/or production site of a company. Does not store addresses /
locations of customers. Contains 23 rows; references with the
departments and countries tables. ';

COMMENT ON COLUMN locations.location_id


IS 'Primary key of locations table';

COMMENT ON COLUMN locations.street_address


IS 'Street address of an office, warehouse, or production site of a company.
Contains building number and street name';

COMMENT ON COLUMN locations.postal_code


IS 'Postal code of the location of an office, warehouse, or production site
of a company. ';

COMMENT ON COLUMN locations.city


IS 'A not null column that shows city where an office, warehouse, or
production site of a company is located. ';

COMMENT ON COLUMN locations.state_province


IS 'State or Province where an office, warehouse, or production site of a
company is located.';

COMMENT ON COLUMN locations.country_id


IS 'Country where an office, warehouse, or production site of a company is
located. Foreign key to country_id column of the countries table.';

COMMENT ON TABLE departments


IS 'Departments table that shows details of departments where employees
work. Contains 27 rows; references with locations, employees, and job_history
tables.';

COMMENT ON COLUMN departments.department_id


IS 'Primary key column of departments table.';

COMMENT ON COLUMN departments.department_name


IS 'A not null column that shows name of a department. Administration,
Marketing, Purchasing, Human Resources, Shipping, IT, Executive, Public
Relations, Sales, Finance, and Accounting. ';

COMMENT ON COLUMN departments.manager_id


IS 'Manager_id of a department. Foreign key to employee_id column of employees
table. The manager_id column of the employee table references this column.';

COMMENT ON COLUMN departments.location_id


IS 'Location id where a department is located. Foreign key to location_id column of
locations table.';

COMMENT ON TABLE job_history


IS 'Table that stores job history of the employees. If an employee
changes departments within the job or changes jobs within the department,
new rows get inserted into this table with old job information of the
employee. Contains a complex primary key: employee_id+start_date.
Contains 25 rows. References with jobs, employees, and departments tables.';

COMMENT ON COLUMN job_history.employee_id


IS 'A not null column in the complex primary key employee_id+start_date.
Foreign key to employee_id column of the employee table';

COMMENT ON COLUMN job_history.start_date


IS 'A not null column in the complex primary key employee_id+start_date.
Must be less than the end_date of the job_history table. (enforced by
constraint jhist_date_interval)';

COMMENT ON COLUMN job_history.end_date


IS 'Last day of the employee in this job role. A not null column. Must be
greater than the start_date of the job_history table.
(enforced by constraint jhist_date_interval)';

COMMENT ON COLUMN job_history.job_id


IS 'Job role in which the employee worked in the past; foreign key to
job_id column in the jobs table. A not null column.';

COMMENT ON COLUMN job_history.department_id


IS 'Department id in which the employee worked in the past; foreign key to
deparment_id column in the departments table';

COMMENT ON TABLE countries


IS 'country table. Contains 25 rows. References with locations table.';

COMMENT ON COLUMN countries.country_id


IS 'Primary key of countries table.';

COMMENT ON COLUMN countries.country_name


IS 'Country name';

COMMENT ON COLUMN countries.region_id


IS 'Region ID for the country. Foreign key to region_id column in the departments
table.';

COMMENT ON TABLE jobs


IS 'jobs table with job titles and salary ranges. Contains 19 rows.
References with employees and job_history table.';

COMMENT ON COLUMN jobs.job_id


IS 'Primary key of jobs table.';

COMMENT ON COLUMN jobs.job_title


IS 'A not null column that shows job title, e.g. AD_VP, FI_ACCOUNTANT';

COMMENT ON COLUMN jobs.min_salary


IS 'Minimum salary for a job title.';

COMMENT ON COLUMN jobs.max_salary


IS 'Maximum salary for a job title';

COMMENT ON TABLE employees


IS 'employees table. Contains 107 rows. References with departments,
jobs, job_history tables. Contains a self reference.';
COMMENT ON COLUMN employees.employee_id
IS 'Primary key of employees table.';

COMMENT ON COLUMN employees.first_name


IS 'First name of the employee. A not null column.';

COMMENT ON COLUMN employees.last_name


IS 'Last name of the employee. A not null column.';

COMMENT ON COLUMN employees.email


IS 'Email id of the employee';

COMMENT ON COLUMN employees.phone_number


IS 'Phone number of the employee; includes country code and area code';

COMMENT ON COLUMN employees.hire_date


IS 'Date when the employee started on this job. A not null column.';

COMMENT ON COLUMN employees.job_id


IS 'Current job of the employee; foreign key to job_id column of the
jobs table. A not null column.';

COMMENT ON COLUMN employees.salary


IS 'Monthly salary of the employee. Must be greater
than zero (enforced by constraint emp_salary_min)';

COMMENT ON COLUMN employees.commission_pct


IS 'Commission percentage of the employee; Only employees in sales
department elgible for commission percentage';

COMMENT ON COLUMN employees.manager_id


IS 'Manager id of the employee; has same domain as manager_id in
departments table. Foreign key to employee_id column of employees table.
(useful for reflexive joins and CONNECT BY query)';

COMMENT ON COLUMN employees.department_id


IS 'Department id where employee works; foreign key to department_id
column of the departments table';

COMMIT;

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy