Sei sulla pagina 1di 16

Part I Entity Relationship Modeling (Chapter 4, Problem 9 a, b & c)

OPENING PK OPN_NUM OPN_DESC OPN_STARTDATE OPN_ENDDATE QUAL_ID CO_ID

FK1 FK2

PLACEMENT

/*SQL script to create the TEC database and associated tables and then load the data*/

/*Create the database and switch to it*/ CREATE DATABASE TEC;

USE TEC;

/*Create table COMPANY*/ CREATE TABLE COMPANY (co_id co_name co_division CHAR(3) PRIMARY KEY, VARCHAR(15), VARCHAR(15));

/*Create table QUALIFICATION*/ CREATE TABLE QUALIFICATION (qual_id qual_date qual_code VARCHAR(3) PRIMARY KEY, DATE, VARCHAR(3));

/*Create table OPENING*/ CREATE TABLE OPENING (opn_num CHAR(5) PRIMARY KEY, opn_desc VARCHAR(15), opn_startdate DATE NOT NULL, opn_enddate DATE NOT NULL,

co_id

CHAR(3) NOT NULL,

qual_id VARCHAR(3), FOREIGN KEY (co_id) REFERENCES COMPANY(co_id), FOREIGN KEY (qual_id) REFERENCES QUALIFICATION(qual_id));

/*Create table CANDIDATE*/ CREATE TABLE CANDIDATE (cand_id CHAR(3) PRIMARY KEY,

cand_fname VARCHAR(15) NOT NULL, cand_mi VARCHAR(2),

cand_lname VARCHAR(15) NOT NULL, cand_dob DATE);

/*Create table JOB HISTORY*/ CREATE TABLE JOB_HISTORY (job_id VARCHAR(3) PRIMARY KEY, DATE, DATE, CHAR(3),

job_startdate job_end_data cand_id

FOREIGN KEY (cand_id) REFERENCES CANDIDATE(cand_id));

/*Create table PLACEMENT*/ CREATE TABLE PLACEMENT (plac_num CHAR(5),

plac_desc VARCHAR(15), plac_start_date DATE, plac_end_date DATE, job_id VARCHAR(3), opn_num CHAR(5), cand_id CHAR(3), PRIMARY KEY(plac_num, opn_num), FOREIGN KEY (cand_id) REFERENCES CANDIDATE(cand_id));

/*Create table EDUCATION*/ CREATE TABLE QUAL_EARNED (Edu_earned_num CHAR(5) PRIMARY KEY,

Edu_earned_desc VARCHAR(15), cand_id VARCHAR(3), qual_id CHAR(3), FOREIGN KEY (qual_id) REFERENCES Qualification(qual_id), FOREIGN KEY (cand_id) REFERENCES CANDIDATE(cand_id));

/*Create table COURSE*/ CREATE TABLE COURSE (cor_id VARCHAR(3) PRIMARY KEY,

cor_desc VARCHAR(15), cor_fee qual_id VARCHAR(5), VARCHAR(3),

FOREIGN KEY (qual_id) REFERENCES QUALIFICATION(qual_id));

/*Create table PREREQUISITE*/ CREATE TABLE PREREQUISITE (qual_id VARCHAR(3), cor_id VARCHAR(3), PRIMARY KEY (qual_id,cor_id), FOREIGN KEY (qual_id) REFERENCES QUALIFICATION(qual_id), FOREIGN KEY (cor_id) REFERENCES COURSE(cor_id));

/*Create table SESSION*/ CREATE TABLE SESSION (sess_num cor_id sess_date ses_time VARCHAR(3) PRIMARY KEY, VARCHAR(3), DATE, TIME,

FOREIGN KEY (cor_id) REFERENCES COURSE(cor_id));

/*Create table ENROLL*/ CREATE TABLE ENROLL (Enroll_id VARCHAR(3),

Enroll_description VARCHAR(15), Enroll_date DATE, cor_id sess_num cand_id VARCHAR(3), VARCHAR(3), VARCHAR(3),

PRIMARY KEY(enroll_id, cor_id, Sess_num), FOREIGN KEY (cor_id) REFERENCES COURSE(cor_id), FOREIGN KEY (sess_num) REFERENCES SESSION(sess_num));

Part II Normalization (Chapter 6, Problem 9 a, b & c)


Chapter 6 Question #9

A & B Dependency diagram and dependencies


Relational Schema EMPLOYEE (EMP_NUM, PROF_RANK, EMP_NAME, DEPT_CODE, DEPT_NAME, PROF_OFFICE, ADVISEE, COMMITTEE_CODE, JOURNAL_CODE) Dependency Diagram

EMP_NU M

EMP_NA ME

PROF_RA NK

PROF_OFFI CE

DEPT_CO DE

DEPT_NA ME

ADVISE E

COMMITTEE_CO DE

OURNAL_CO DE

Transitive Dependency

C
TABLES IN 3NF WITH RENAMED ATTRIBUTE AND ADDITIONAL NEEDED ATTRIBUTES EMPLOYEE TABLE

EMP_NUM

EMP_FNAME

EMP_LNAME

EMP_DOB

EMP_HIRE_DATE

DEPT_CODE

PROF_CODE

ADVIS_CODE

PROFESSOR TABLE

PROF_CODE

PROF_RANK

PROF_OFFICE

PROF_ASSIGNED_DATE

DEPARTMENT TABLE

DEPT_CODE

DEPT_NAME

DEPT_HEAD

COMMITTEE TABLE

COMMIT_CODE

COMMIT_PERIOD

COMMIT_ASSIGNMENT

ADVISEE TABLE

ADVIS_CODE

ADVIS_TYPE

ADVIS_FNAME

ADVIS_MI

ADVIS_LNAME

ADVIS_DOB

JOURNAL TABLE

JOURN_CODE

JOURN_DESC

JOURN_ENTRY_DATE

Part III SQL:

/* Question 1 */ SELECT* FROM orders;

/* Question 2 */ SELECT order_num FROM orders WHERE customer_num='148' And order_date='2007-10-20';

/* Question 3 */ SELECT part_num, description FROM part WHERE class <> 'SG';

/* Question 4 */ SELECT part_num, description, ROUND(on_hand * price,2) AS 'ON_HAND_VALUE' FROM part WHERE class = 'AP';

/* Question 5 */ SELECT part_num, description FROM part WHERE class IN('AP', 'SG');

/* Question 6 */ SELECT * FROM part GROUP BY description ORDER BY description;

/* Question 7 */ SELECT COUNT(*) FROM customer WHERE balance > credit_limit;

/* Question 8 */ SELECT part_num, description, p.on_hand FROM part p, (SELECT AVG(on_hand) AS avgon_hand FROM part)h WHERE p.on_hand > h.avgon_hand GROUP By part_num, description, on_hand ORDER BY Part_num;

/* Question 9 */ SELECT part_num, description, MAX(price) AS price FROM part;

/* Question 10 */ SELECT c.rep_num AS rep_num, SUM_balance

FROM customer c, (SELECT rep_num, SUM(balance) AS 'SUM_balance' FROM customer GROUP BY rep_num)b WHERE c.rep_num = b.rep_num AND SUM_balance > '10000' GROUP BY rep_num;

/* Question 11 */ SELECT part_num FROM part WHERE description = 'Kitchen Sterio';

/* Question 12 */ SELECT order_num, c.customer_num, customer_name FROM orders o, customer c WHERE c.customer_num = o.customer_num AND order_date = '2007-10-21';

/* Question 13 */ SELECT c.customer_num, customer_name FROM customer c, orders o WHERE c.customer_num = o.customer_num AND order_date IN('2007-10-21') ORDER BY c.customer_num;

/* Question 14 */ SELECT customer_num, customer_name FROM customer WHERE customer_num NOT IN(SELECT customer_num FROM orders WHERE order_date = '2007-1021') GROUP BY customer_num, customer_name ORDER BY customer_num;

/* Question 15 */ SELECT o.order_num, order_date, p.part_num, description, class FROM orders o, order_line l, part p WHERE o.order_num = l.order_num AND l.part_num = p.part_num ORDER BY class, o.order_num;

/* Question 16 */ SELECT rep_num, last_name, first_name FROM rep WHERE (rep_num, last_name, first_name) IN (SELECT r.rep_num AS REP_NUM, r.last_name AS LAST_NAME, r.first_name AS FIRST_NAME FROM rep r, customer c WHERE r.rep_num = c.rep_num AND c.credit_limit = '5000');

/* Question 17 This is the controversial question and 14 records was the accepted result everyone got. */ SELECT p2.part_num AS PART_NUM, p2.description AS DESCRIPTION, p1.part_num AS PART_NUM, p1.description AS DESCRIPTION, p2.class AS CLASS FROM part p1, part p2 WHERE p1.class = p2.class AND p1.part_num > p2.part_num GROUP BY p2.part_num, p2.description, p1.part_num, p1.description, p2.class ORDER BY p2.class, p2.part_num;

/* Question 18 */ SELECT ol.order_num AS ORDER_NUM, order_date AS ORDER_DATE FROM order_line ol, orders o, part p WHERE ol.order_num = o.order_num AND ol.part_num = p.part_num ORDER By p.part_num;

/* Question 19 - Johnson's Department Store is customer_num 608 and Gas Range is part_num DR93 */ SELECT o.order_num, order_date FROM orders o, customer c, order_line ol, part p

WHERE o.customer_num = c.customer_num AND o.order_num = ol.order_num AND ol.part_num = p.part_num AND (c.customer_num = '608' AND p.part_num = 'DR93');

/* Question 20 */ SELECT part_num, description, price, class FROM part WHERE price > ALL (SELECT price FROM part WHERE class = 'AP');

/* Question 21 */ SELECT p.part_num, description, on_hand, order_num, num_ordered FROM part p LEFT OUTER JOIN order_line ol ON p.part_num = ol.part_num ORDER BY p.part_num;

/* Question 22 - Create a NONAPPLIANCE table*/ CREATE TABLE NONAPPLIANCE ( part_num CHAR(4) PRIMARY KEY,

description VARCHAR(15), on_hand class DECIMAL(4,0), CHAR(2),

price );

DECIMAL(6,2)

/* Question 23 - Insert into NONAPPLIANCE table from PART table */ INSERT INTO NONAPPLIANCE (part_num, description, on_hand, class, price) SELECT part_num, description,on_hand, class, price FROM part WHERE class <> 'AP';

/* Question 24 - Update price in nonappliance table by 2% when class = SG */ SET SQL_SAFE_UPDATES=0;

UPDATE nonappliance SET price = price + (price * 0.02) WHERE class = 'SG';

/* Question 25 - Delete all parts with a class = SG from nonappliance table */ DELETE FROM nonappliance WHERE class = 'SG';

/* Question 26 - Increase column length */ ALTER TABLE nonappliance MODIFY description VARCHAR(30);

/* Question 27 - Increase column length */ DROP TABLE nonappliance;

/* Question 28 - Create View Part_Order */ CREATE VIEW PART_ORDER AS SELECT p.part_num, description, price, ol.order_num, order_date, num_ordered, quoted_price FROM part p, order_line ol, orders o WHERE p.part_num = ol.part_num AND ol.order_num = o.order_num;

/* Question 29 - Select from the PART_ORDER view */ SELECT PART_ORDER.part_num, PART_ORDER.description, PART_ORDER.order_num, PART_ORDER.quoted_price

FROM premiere.PART_ORDER WHERE PART_ORDER.quoted_price > '100';

/* Question 30 - Create Index PART_INDEX1 on PART table */ CREATE INDEX PART_INDEX1 ON part (class);

Potrebbero piacerti anche