140 likes | 290 Views
Project. Midterm Review. Midterm Questions Distribution: ~45 % SQL (Joins, Group by, Correlated Subqueries, Subqueries in the “from” clause, Views) ~35 % Modeling, Constraints and Triggers (see next pages) ~10 % HTML DB ~10% General Questions. Midterm Review. Bank Object Model.
E N D
Project Data Management
Midterm Review • Midterm Questions Distribution: • ~45 % SQL (Joins, Group by, Correlated Subqueries, Subqueries in the “from” clause, Views) • ~35 % Modeling, Constraints and Triggers (see next pages) • ~10 % HTML DB • ~10% General Questions Data Management
Midterm Review Bank Object Model Data Management
Midterm Review Bank Relational Model Data Management
Midterm Review • Bank DDL • drop table loan cascade constraints; • drop table customer cascade constraints; • drop table account cascade constraints; • drop table depositor cascade constraints; • drop table branch cascade constraints; • drop table borrower cascade constraints; • CREATE TABLE account ( • account_number SMALLINT NOT NULL, • balance SMALLINT NOT NULL, • branch_name SMALLINT, • CONSTRAINT PK_T_account14 PRIMARY KEY (account_number) • ); • CREATE TABLE branch ( • branch_name SMALLINT NOT NULL, • branch_city SMALLINT NOT NULL, • assets SMALLINT NOT NULL, • CONSTRAINT PK_T_branch13 PRIMARY KEY (branch_name) • ); Data Management
Bank DDL (continued) • CREATE TABLE customer ( • customer_name SMALLINT NOT NULL, • customer_street SMALLINT NOT NULL, • customer_city SMALLINT NOT NULL, • CONSTRAINT PK_T_customer15 PRIMARY KEY (customer_name) • ); • CREATE TABLE loan ( • loan_number SMALLINT NOT NULL, • amount SMALLINT NOT NULL, • branch_name SMALLINT, • CONSTRAINT PK_T_loan16 PRIMARY KEY (loan_number) • ); • CREATE TABLE depositor ( • customer_name SMALLINT NOT NULL, • account_number SMALLINT NOT NULL, • CONSTRAINT PK_T_517 PRIMARY KEY (customer_name, account_number) • ); • CREATE TABLE borrower ( • loan_number SMALLINT NOT NULL, • customer_name SMALLINT NOT NULL, • CONSTRAINT PK_T_618 PRIMARY KEY (loan_number, customer_name) • ); Midterm Review Data Management
Bank DDL (continued) • CREATE INDEX TC_T_loan534 ON loan (branch_name); • CREATE INDEX TC_T_account532 ON account (branch_name); • CREATE INDEX TC_T_5535 ON depositor (customer_name); • CREATE INDEX TC_T_5536 ON depositor (account_number); • CREATE INDEX TC_T_6537 ON borrower (loan_number); • CREATE INDEX TC_T_6538 ON borrower (customer_name); • ALTER TABLE loan ADD CONSTRAINT FK_T_loan14 FOREIGN KEY (branch_name) • REFERENCES branch (branch_name) ON DELETE SET NULL; • ALTER TABLE account ADD CONSTRAINT FK_T_account13 FOREIGN KEY (branch_name) • REFERENCES branch (branch_name) ON DELETE SET NULL; • ALTER TABLE depositor ADD CONSTRAINT FK_T_515 FOREIGN KEY (customer_name) • REFERENCES customer (customer_name) ON DELETE CASCADE; • ALTER TABLE depositor ADD CONSTRAINT FK_T_516 FOREIGN KEY (account_number) • REFERENCES account (account_number) ON DELETE CASCADE; • ALTER TABLE borrower ADD CONSTRAINT FK_T_617 FOREIGN KEY (loan_number) • REFERENCES loan (loan_number) ON DELETE CASCADE; • ALTER TABLE borrower ADD CONSTRAINT FK_T_618 FOREIGN KEY (customer_name) • REFERENCES customer (customer_name) ON DELETE CASCADE; Midterm Review Data Management
Bank DDL (continued) • INSERT INTO branch VALUES (10, 20, 30); • INSERT INTO account VALUES (100, 200, 10); • create or replace and compile java source named BRANCH_METHODS • as • import java.util.*; • import java.sql.*; • public class branchMethods{ • public static void branch_name_update(int old_branch_name, int new_branch_name) throws SQLException { • Connection conn = DriverManager.getConnection("jdbc:oracle:kprb:@"); • System.out.println("In branch_name_update, updating branch_name in account to " + new_branch_name + " where branch_name is " + old_branch_name); • String query = "update account set branch_name = ? where branch_name = ? "; • PreparedStatement pstatement = conn.prepareStatement(query); • pstatement.setInt(1, new_branch_name); • pstatement.setInt(2, old_branch_name); • pstatement.executeQuery(); } • } • / Midterm Review Data Management
Bank DDL (continued) • CREATE OR REPLACE PROCEDURE "SCOTT"."BRANCH_NAME_UPDATE" ( • old_branch_name number, new_branch_name number) • as language java • name 'branchMethods.branch_name_update(int, int)'; • / • set serveroutput on size 10000 • call dbms_java.set_output(10000); • CREATE OR REPLACE TRIGGER "SCOTT"."BRANCH_NAME_UPDATE" BEFORE • UPDATE OF "BRANCH_NAME" ON "SCOTT"."BRANCH" FOR EACH ROW call BRANCH_NAME_UPDATE(:old.branch_name, :new.branch_name) • / Midterm Review Data Management
Midterm Review Object Model Data Management
Midterm Review Relational Model Data Management
Midterm Review • DDL • CREATE TABLE T_e ( • num SMALLINT NOT NULL, • name SMALLINT, • CONSTRAINT PK_T_e15 PRIMARY KEY (num), • CONSTRAINT TC_T_e142 UNIQUE (name) • ); • CREATE TABLE T_d ( • age SMALLINT NOT NULL, • name SMALLINT NOT NULL, • id SMALLINT NOT NULL, • CONSTRAINT PK_T_d14 PRIMARY KEY (name, id) • ); • CREATE TABLE T_c ( • id SMALLINT NOT NULL, • CONSTRAINT PK_T_c16 PRIMARY KEY (id) • ); • CREATE TABLE T_b ( • name SMALLINT NOT NULL, • id SMALLINT, • CONSTRAINT PK_T_b12 PRIMARY KEY (name) • ); Data Management
Midterm Review • DDL (continued) • CREATE TABLE T_a ( • id SMALLINT NOT NULL, • CONSTRAINT PK_T_a11 PRIMARY KEY (id) • ); • CREATE INDEX TC_T_e141 ON T_e (name); • CREATE INDEX TC_T_d139 ON T_d (id); • CREATE INDEX TC_T_d138 ON T_d (name); • ALTER TABLE T_e ADD CONSTRAINT FK_T_e11 FOREIGN KEY (name) • REFERENCES T_b (name) ON DELETE SET NULL; • ALTER TABLE T_d ADD CONSTRAINT FK_T_d9 FOREIGN KEY (name) • REFERENCES T_b (name) ON DELETE CASCADE; • ALTER TABLE T_d ADD CONSTRAINT FK_T_d10 FOREIGN KEY (id) • REFERENCES T_a (id) ON DELETE CASCADE; • ALTER TABLE T_c ADD CONSTRAINT FK_T_c14 FOREIGN KEY (id) • REFERENCES T_a (id) ON DELETE CASCADE; • ALTER TABLE T_b ADD CONSTRAINT FK_T_b13 FOREIGN KEY (id) • REFERENCES T_c (id) ON DELETE SET NULL; Data Management
Midterm Review create table "DUMMY" ( "ID" NUMBER, constraint "DUMMY_PK" primary key ("ID") ) / comment on table "DUMMY" is 'This table was created using the table wizard.' / create sequence "DUMMY_SEQ" / create trigger "BI_DUMMY" before insert on "DUMMY" for each row begin for c1 in ( select DUMMY_SEQ.nextval next_val from dual ) loop :new.ID := c1.next_val; end loop; end; / Data Management