Sie sind auf Seite 1von 24

DATABASE MANAGEMENT SYSTEM PROJECT ON NEWS MART

SUBMITTED BY, PAVITHRA.S SINDHIA.M

SCENARIO

CONSIDER THE FOLLOWING REQUIREMENT FOR NEWS MART.THE NEWS MART PROVIDES NEWSPAPERS AND MAGAZINES TO A PARTICULAR LOCATION I.E ADAYAR WHERE THE MART IS SITUATED. MAGAZINES ARE ORDERED THROUGH THE PUBLISHER AND THE NEWSPAPERS THROUGH THE PRESS. CUSTOMER CAN BUY ANY NUMBER OF MAGAZINES AND/OR NEWSPAPERS.THE BILL IS GENERATED ACCORDLINGLY.

BUSINESS RULES

1. NEWS MART SUPPLIES NEWSPAPERS AND MAGAZINES TO THE CUSTOMERS.

2. CUSTOMERS LOCATION MUST BE WITHIN THE MART AREA I.E. ADAYAR.

3. CUSTOMERS CAN BUY ANY NUMBER OF NEWSPAPER AND MAGAZINE.

4. THE CUSTOMER DETAILS AND THEIR PUCHASES ARE KEPT TRACK OF.

ENTITY RELATIONSHIP DIAGRAM

PU_ID

P_NAME

NAME
E_ID GENDER

CON_NO
SU_NO

P_ID

P_LOC

LOC

1 PUBLISHER 1 1
SUPE RVISE

MART
1 1

GIVES ORDER TO

PRESS
1

SUPP LIES

WORKS FOR

PAYS

PRINTS

N
CUS_ID
M_NAME

1
N_NAME N_PRICE

C_NAME

MAGAZINE
M_PRICE GENDER

CUSTOMER
BILL_NO

BILL
TOT_AMT

NEWSPAPER

ADDRESS C_LOC

NO_NEWS
NEWS_AMT

NO_MAG MAG_AMT

BUYS

RELATIONSHIP TABLE

PUBLISHER MART

PID PNAME

EID

EID

NAME GENDER CONTACT_NO

LOCATION SUP_NO

MAGAZINE

PRESS

MAG_NAME M_PRICE
CUSTOMER

PR_ID PRNAME EID


NEWSPAPER

CUS_ID CNAME

GENDER ADDRESS CLOCATION EID

N_NAME N_PRICE

CUST_MAG

CUS_ID

MAG_NAME

CUS_ID

N_NAME
CUST_NEWS

BILL

B_NO

NO_NEWS NO_MAG NEWS_AMT MAG_AMT

TOT_AMT

BILL_ITEM

B_NO

ITEM_NAME

TABLES IN MYSQL
1. TABLE FOR MART mysql> CREATE TABLE MART(EMP_ID INTEGER PRIMARY KEY,NAME CHAR(10), -> GENDER ENUM('M','F'),CONTACT_NO INTEGER, -> LOCATION CHAR(20),SUP_NO INTEGER REFERENCES MART(EMP_ID)); Query OK, 0 rows affected (0.17 sec)

2. TABLE FOR PUBLISHER mysql> CREATE TABLE PUBLISHER(PUB_ID INTEGER PRIMARY KEY,P_NAME VARCHAR(15), -> EMP_ID INTEGER REFERENCES MART(EMP_ID)); Query OK, 0 rows affected (0.16 sec)

3. TABLE FOR MAGAZINE mysql> CREATE TABLE MAGAZINE(MAG_NAME CHAR(15) PRIMARY KEY,M_PRICE INTEGER, -> SUP_NO INTEGER,SUP_NAME CHAR(15)); Query OK, 0 rows affected (0.11 sec)

4. TABLE FOR PRESS mysql> CREATE TABLE PRESS(PR_ID INTEGER PRIMARY KEY,PR_NAME CHAR(10),EMP_ID INTEGER -> REFERENCES MART(EMP_ID)); Query OK, 0 rows affected (0.11 sec)

5. TABLE FOR NEWSPAPER mysql> CREATE TABLE NEWSPAPER(N_NAME CHAR(15) PRIMARY KEY,N_PRICE INTEGER); Query OK, 0 rows affected (0.13 sec)

6. TABLE FOR CUSTOMER mysql> CREATE TABLE CUSTOMER(CUST_ID INTEGER PRIMARY KEY,CUST_NAME CHAR(15), -> GENDER ENUM('M','F'),ADDRESS CHAR(25), -> CUST_LOCATION CHAR(10),EMP_ID INTEGER REFERENCES MART(EMP_ID)); Query OK, 0 rows affected (0.14 sec)

7. TABLE FOR BILL: mysql>CREATE TABLE BILL(BILL_NO INTEGER PRIMARY KEY,NO_OF_MAG INTEGER,NO_OF_NEWS INTEGER ,MAG_AMT INTEGER,NEWS_AMT INTEGER);TABLE FOR BILL_ITEM

8. TABLE FOR BILL_ITEM: mysql> CREATE TABLE BILL_ITEM(BILL_NO INTEGER REFERENCES BILL(BILL_NO),ITEM_NAME CHAR(15), -> PRIMARY KEY(BILL_NO,ITEM_NAME)); Query OK, 0 rows affected (0.13 sec)

9.TABLE FOR CUST_MAG mysql> CREATE TABLE CUST_MAG(CUST_ID INTEGER REFERENCES CUSTOMER(CUST_ID),MAG_NAME CHAR(15) -> REFERENCES MAGAZINE(MAG_NAME), -> PRIMARY KEY(CUST_ID,MAG_NAME)); Query OK, 0 rows affected (0.13 sec)

10. TABLE FOR CUST_NEWS mysql> CREATE TABLE CUST_NEWS(CUST_ID INTEGER REFERENCES CUSTOMER(CUST_ID),N_NAME CHAR(15) -> REFERENCES NEWSPAPER(N_NAME), -> PRIMARY KEY(CUST_ID,N_NAME)); Query OK, 0 rows affected (0.13 sec)

TRIGGERS IN MYSQL

1. TRIGGER FOR CHECKING LOCATION: DELIMITER // CREATE TRIGGER CUST_LOC AFTER INSERT ON CUSTOMER FOR EACH ROW BEGIN IF(NEW.CUST_LOCATION!='ADAYAR') THEN RAISE_APPLICATION_ERROR('LOCATION OUT OF BOUND'); END IF; END; //

2. TRIGGER FOR UPDATING COUNTS AND AMOUNTS:

DELIMITER // CREATE TRIGGER BILL_COUNT00 AFTER INSERT ON BILL_ITEM FOR EACH ROW BEGIN DECLARE NO_OF_NEWS INTEGER; DECLARE NO_OF_MAG INTEGER; UPDATE BILL SET NO_OF_NEWS=(SELECT COUNT(*) FROM CUST_NEWS WHERE BILL_NO=CUST_ID); UPDATE BILL SET NO_OF_MAG=(SELECT COUNT(*) FROM CUST_MAG WHERE BILL_NO=CUST_ID); UPDATE BILL SET MAG_AMT=(SELECT SUM(M_PRICE) FROM MAGAZINE WHERE MAG_NAME IN(SELECT MAG_NAME FROM CUST_MAG WHERE BILL_NO=CUST_ID)); UPDATE BILL SET NEWS_AMT=(SELECT SUM(N_PRICE) FROM NEWSPAPER WHERE N_NAME IN(SELECT N_NAME FROM CUST_NEWS WHERE BILL_NO=CUST_ID)); UPDATE BILL SET TOTAL_AMOUNT=MAG_AMT + NEWS_AMT; END;
//

TABLES IN POSTGRES
1. TABLE FOR MART postgres=# CREATE TABLE MART(EMP_ID VARCHAR(5) PRIMARY KEY,NAME VARCHAR(10), postgres(# GENDER VARCHAR(1) CHECK(GENDER IN('M','F')),CONTACT_NO VARCHAR(10), postgres(# LOCATION VARCHAR(20),SUP_NO VARCHAR(5) REFERENCES MART);

2. TABLE FOR PUBLISHER postgres=# CREATE TABLE PUBLISHER(PUB_ID VARCHAR(5) PRIMARY KEY,P_NAME VARCHAR(15), postgres(# EMP_ID VARCHAR(5) REFERENCES MART(EMP_ID));

3. TABLE FOR MAGAZINE postgres=# CREATE TABLE MAGAZINE(MAG_NAME VARCHAR(15) PRIMARY KEY,M_PRICE VARCHAR(3), postgres(# SUP_NO VARCHAR(5),SUP_NAME VARCHAR(15));

4. TABLE FOR PRESS postgres=# CREATE TABLE PRESS(PR_ID VARCHAR(5) PRIMARY KEY,PR_NAME VARCHAR(10),EMP_ID VARCHAR(5) postgres(# REFERENCES MART(EMP_ID));

5. TABLE FOR NEWSPAPER postgres=# CREATE TABLE NEWSPAPER(N_NAME VARCHAR(15) PRIMARY KEY,N_PRICE VARCHAR(2));

6. TABLE FOR CUSTOMER postgres=# CREATE TABLE CUSTOMER(CUST_ID VARCHAR(5) PRIMARY KEY,CUST_NAME VARCHAR(15), postgres(# GENDER VARCHAR(1) CHECK(GENDER IN('M','F')),ADDRESS VARCHAR(25), postgres(# CUST_LOCATION VARCHAR(10),EMP_ID VARCHAR(5) REFERENCES MART(EMP_ID));

7. TABLE FOR BILL postgres=# CREATE TABLE BILL(BILL_NO VARCHAR(5) PRIMARY KEY,NO_OF_MAG VARCHAR(3) ,NO_OF_NEWS VARCHAR(3), postgres(# MAG_AMT VARCHAR(6),NEWS_AMT VARCHAR(6));

8. TABLE FOR BILL_ITEM postgres=# CREATE TABLE BILL_ITEM(BILL_NO VARCHAR(5) REFERENCES BILL(BILL_NO),ITEM_NAME VARCHAR(15), postgres(# PRIMARY KEY(BILL_NO,ITEM_NAME));

9. TABLE FOR CUST_MAG postgres=# CREATE TABLE CUST_MAG(CUST_ID VARCHAR(5) REFERENCES CUSTOMER(CUST_ID),MAG_NAME VARCHAR(15) postgres(# REFERENCES MAGAZINE(MAG_NAME), Opostgres(# PRIMARY KEY(CUST_ID,MAG_NAME));

10. TABLE FOR CUST_NEWS postgres=# CREATE TABLE CUST_NEWS(CUST_ID VARCHAR(5) REFERENCES CUSTOMER(CUST_ID),N_NAME VARCHAR(15) postgres(# REFERENCES NEWSPAPER(N_NAME), postgres(# PRIMARY KEY(CUST_ID,N_NAME));

TRIGGERS IN POSTGRES

1. TRIGGER FOR MAGAZINE COUNT: postgres=# CREATE OR REPLACE FUNCTION MCNT() postgres-# RETURNS TRIGGER AS $$ postgres$# BEGIN postgres$# UPDATE BILL SET NO_OF_ITEMS=(SELECT COUNT(*) FROM CUST_MAG postgres$# WHERE CUST_ID=NEW.CUST_ID); postgres$# RETURN NEW; postgres$# END; postgres$# $$ LANGUAGE PLPGSQL; CREATE FUNCTION

postgres=# CREATE TRIGGER BILL_COUNT postgres-# AFTER INSERT ON CUST_MAG postgres-# FOR EACH ROW postgres-# EXECUTE PROCEDURE MCNT(); CREATE TRIGGER

2. TRIGGER FOR NEWSPAPER COUNT: postgres=# CREATE OR REPLACE FUNCTION NCNT() postgres-# RETURNS TRIGGER AS $$ postgres$# BEGIN postgres$# UPDATE BILL SET NO_OF_ITEMS=(SELECT COUNT(*) FROM CUST_NEWS postgres$# WHERE CUST_ID=NEW.CUST_ID); postgres$# RETURN NEW; postgres$# END; postgres$# $$ LANGUAGE PLPGSQL; CREATE FUNCTION postgres=# CREATE TRIGGER BILL_COUNT1 postgres-# AFTER INSERT ON CUST_NEWS postgres-# FOR EACH ROW postgres-# EXECUTE PROCEDURE NCNT(); CREATE TRIGGER

3. TRIGGER FOR MAGAZINE AMOUNT: postgres=# CREATE OR REPLACE FUNCTION M_AMT() postgres-# RETURNS TRIGGER AS $$ postgres$# DECLARE postgres$# MAG_AMT VARCHAR(12); postgres$# BEGIN postgres$# IF(NEW.BILL_NO IS NOT NULL) postgres$# THEN postgres$# UPDATE BILL SET MAG_AMOUNT=(SELECT SUM(M_PRICE) FROM MAGAZINE postgres$# WHERE postgres$# MAG_NAME IN(SELECT MAG_NAME FROM CUST_MAG WHERE BILL_NO=CUST_ID)); postgres$# ELSE postgres$# RAISE EXCEPTION'BILL_NO IS NULL'; postgres$# END IF; postgres$# RETURN NEW; postgres$# END; postgres$# $$ LANGUAGE PLPGSQL; CREATE FUNCTION postgres=# CREATE TRIGGER BILL_AMOUNT postgres-# AFTER INSERT ON BILL_ITEM postgres-# FOR EACH ROW postgres-# EXECUTE PROCEDURE M_AMT(); CREATE TRIGGER

4. TRIGGER FOR NEWS AMOUNT: postgres=# CREATE OR REPLACE FUNCTION N_AMT() postgres-# RETURNS TRIGGER AS $$ postgres$# DECLARE postgres$# NEWS_AMT VARCHAR(12); postgres$# BEGIN postgres$# IF(NEW.BILL_NO IS NOT NULL) postgres$# THEN postgres$# UPDATE BILL SET NEWS_AMOUNT=(SELECT SUM(N_PRICE) FROM NEWSPAPER postgres$# WHERE postgres$# N_NAME IN(SELECT N_NAME FROM CUST_NEWS WHERE BILL_NO=CUST_ID)); postgres$# ELSE postgres$# RAISE EXCEPTION'BILL_NO IS NULL'; postgres$# END IF; postgres$# RETURN NEW; postgres$# END; postgres$# $$ LANGUAGE PLPGSQL; CREATE FUNCTION postgres=# CREATE TRIGGER BILL_AMOUNT00 postgres-# AFTER INSERT ON BILL_ITEM postgres-# FOR EACH ROW postgres-# EXECUTE PROCEDURE N_AMT(); CREATE TRIGGER

TABLES IN INGRES
1. TABLE FOR MART CREATE TABLE MART(EMP_ID VARCHAR(5) PRIMARY KEY,NAME VARCHAR(10), GENDER VARCHAR(1) CHECK(GENDER IN('M','F')),CONTACT_NO VARCHAR(10), LOCATION VARCHAR(20),SUP_NO VARCHAR(5) REFERENCES MART(EMP_ID))\g

2. TABLE FOR PUBLISHER CREATE TABLE PUBLISHER(PUB_ID VARCHAR(5) PRIMARY KEY,P_NAME VARCHAR(15), EMP_ID VARCHAR(5) REFERENCES MART(EMP_ID))\g

3. TABLE FOR MAGAZINE CREATE TABLE MAGAZINE(MAG_NAME VARCHAR(15) PRIMARY KEY,M_PRICE VARCHAR(3))\g

4. TABLE FOR PRESS CREATE TABLE PRESS(PR_ID VARCHAR(5) PRIMARY KEY,PR_NAME VARCHAR(10),EMP_ID VARCHAR(5) REFERENCES MART(EMP_ID))\g

5. TABLE FOR NEWSPAPER CREATE TABLE NEWSPAPER(N_NAME VARCHAR(15) PRIMARY KEY,N_PRICE VARCHAR(9))\g

6. TABLE FOR CUSTOMER CREATE TABLE CUSTOMER(CUST_ID VARCHAR(5) PRIMARY KEY,CUST_NAME VARCHAR(15), GENDER VARCHAR(1) CHECK(GENDER IN('M','F')),ADDRESS VARCHAR(25), CUST_LOCATION VARCHAR(10),EMP_ID VARCHAR(5) REFERENCES MART(EMP_ID))\g

7. TABLE FOR BILL CREATE TABLE BILL(BILL_NO VARCHAR(5) PRIMARY KEY,NO_OF_MAG VARCHAR(3),NO_OF_NEWS VARCHAR(3), MAG_AMT VARCHAR(6),NEWS_AMT VARCHAR(6))\g

8. TABLE FOR BILL_ITEM CREATE TABLE BILL_ITEM(BILL_NO VARCHAR(5) REFERENCES BILL(BILL_NO) NOT NULL,ITEM_NAME VARCHAR(15) NOT NULL,PRIMARY KEY(BILL_NO,ITEM_NAME))\g

9. TABLE FOR CUST_MAG CREATE TABLE CUST_MAG(CUST_ID VARCHAR(5) REFERENCES CUSTOMER(CUST_ID) NOT NULL,MAG_NAME VARCHAR(15) REFERENCES MAGAZINE(MAG_NAME) NOT NULL,PRIMARY KEY(CUST_ID,MAG_NAME))\g

10. TABLE FOR CUST_NEWS CREATE TABLE CUST_NEWS(CUST_ID VARCHAR(5) REFERENCES CUSTOMER(CUST_ID) NOT NULL,N_NAME VARCHAR(15) REFERENCES NEWSPAPER(N_NAME) NOT NULL,PRIMARY KEY(CUST_ID,N_NAME))\g

TRIGGERS IN INGRES

1. TRIGGER FOR MAGAZINE COUNT: * CREATE PROCEDURE BCNT(BILL_NO VARCHAR(5)) AS * BEGIN * UPDATE BILL SET NO_OF_MAG=(SELECT COUNT(*) FROM CUST_MAG * WHERE BILL_NO=CUST_ID); * END;\G Executing . . .

continue * CREATE TRIGGER BILL_COUNT * AFTER INSERT ON BILL_ITEM * FOR EACH ROW * EXECUTE PROCEDURE BCNT(BILL_NO=NEW.BILL_NO);\G Executing . . .

2. TRIGGER FOR COUNTING NEWSPAPER: * CREATE PROCEDURE NCNT(BILL_NO VARCHAR(5)) AS * BEGIN * UPDATE BILL SET NO_OF_NEWS=(SELECT COUNT(*) FROM CUST_NEWS * WHERE BILL_NO=CUST_ID); * END;\G Executing . . .

continue * CREATE TRIGGER BILL_COUNT1 * AFTER INSERT ON BILL_ITEM * FOR EACH ROW * EXECUTE PROCEDURE NCNT(BILL_NO=NEW.BILL_NO);\G Executing . . .

continue

3.TRIGGER FOR MAGAZINE AMOUNT: * CREATE PROCEDURE MAMT(BILL_NO VARCHAR(5)) AS * * * * DECLARE MAG VARCHAR(6); BEGIN SELECT MAG_AMT INTO MAG FROM BILL WHERE BILL_NO=BILL_NO;

* UPDATE BILL SET MAG_AMT=(SELECT SUM(M_PRICE) PRICE FROM BILL_PRO * WHERE BILL_NO=CUST_ID AND CUST_ID=CUST_ID AND MAG_NAME=MAG_NAME); * END;\G

Executing . . .

continue * CREATE TRIGGER BILL_AMOUNT * * * AFTER INSERT ON BILL_ITEM FOR EACH ROW EXECUTE PROCEDURE MAMT(BILL_NO=NEW.BILL_NO);\G

Executing . . .

4.TRIGGER FOR NEWS AMOUNT: * CREATE PROCEDURE NAMT(BILL_NO VARCHAR(5)) AS * * * * DECLARE NEWS VARCHAR(6); BEGIN SELECT NEWS_AMT INTO NEWS FROM BILL WHERE BILL_NO=BILL_NO;

* UPDATE BILL SET NEWS_AMT=(SELECT SUM(N_PRICE) PRICE FROM BILL_PRO1 * WHERE BILL_NO=CUST_ID AND CUST_ID=CUST_ID AND N_NAME=N_NAME); * END;\G

Executing . . .

continue * CREATE TRIGGER BILL_AMOUNT1 * * * AFTER INSERT ON BILL_ITEM FOR EACH ROW EXECUTE PROCEDURE NAMT(BILL_NO=NEW.BILL_NO);\G

Executing . . .

VIEWS IN INGRES

1.VIEW FOR BILL_PRO:


* CREATE VIEW BILL_PRO AS SELECT CUST_ID,BILL_NO, * CUST_MAG.MAG_NAME,M_PRICE * FROM CUST_MAG,MAGAZINE,BILL * WHERE CUST_ID=BILL_NO AND * CUST_MAG.MAG_NAME=MAGAZINE.MAG_NAME; * \G Executing . . .

2.VIEW FOR BILL_PRO1:


* CREATE VIEW BILL_PRO1 AS SELECT CUST_ID,BILL_NO, * CUST_NEWS.N_NAME,N_PRICE * FROM CUST_NEWS,NEWSPAPER,BILL * WHERE CUST_ID=BILL_NO AND * CUST_NEWS.N_NAME=NEWSPAPER.N_NAME; * \G Executing . . .

Das könnte Ihnen auch gefallen