You are on page 1of 15

COLLEGE OF ENGINEERING

Bachelor of Science in Computer Engineering


DATABASE SYSTEMS
Subject Code
Subject Description
Semester
Commence Date
Dateline
Instructor
Submitted by
Email
Contact Number

:
:
:
:
:
:
:
:
:

CP 533
System Analysis Design
Second
02, February 2016
11, February 2016
Estelito R. Medallada, Jr., CpE
Nino Rhadney E. Cabachete
nrecabachete@gmail.com
09064709359

TABLE OF CONTENTS

Contents
CHAPTER I

Page No.

Business rules

Normalization

...

EER Diagram

...

Data Dictionary

CHAPTER II

List of all CREATE commands

List of all INSERT commands

CHAPTER III
CHAPTER IV

REFERENCES

10
13

Copernicus Pepito, Introduction to SQL Server 2008 Database Programming,


National Book Store, 2010
Jan Harrington, Relational Database Design, Clearly Explained, 2nd
Edition,Morgan Kaufmann Publishers, 2002
W3schools.com,
(2014). SQL
Tutorial.
[online]
Available
at:
http://www.w3schools.com/sql/default.asp [Accessed 29 Aug. 2014].
Dev.mysql.com, (2014). MySQL :: MySQL 5.6 Reference Manual. [online]
Available at: http://dev.mysql.com/doc/refman/5.6/en/index.html [Accessed 29
Aug. 2014].

CHAPTER I
Database Design

Business Rules
Electronic Inventory System
The idea is to keep information about products, costumers and inventory in a system in
which you can identify what product you want to buy, make list of customers name and
address, and ensure a basic inventory at all times. Here is a suggestion for some of the
object which should be modeled in the system:

Product Possible Features: product name, price, status of the product.

Customer Possible features: name, address.

Inventory Possible features: list of products and the remaining stocks.

Normalization
Table Product
P_ID

P_Name P_Pric
e

P_Status

Table Customers
Cus_I
D

Cus_Name Cos_Add

Table Customer_has_Product (Customer and Product Intersection Table)


Cus_I
D

P_ID P_QTY

Table Inventory
I_ID

P_ID RMN_STK

Table Type (Product Type)


R_I
D

I_ID

Enhanced Entity Relationship Diagram (EERD)

Data Dictionary
Table

Attributes
P_ID
P_NAME

PRODUCT

P_PRICE
P_STATUS
T_ID
T_ID

TYPE
P_Type
CUS_ID

Description
Product
Identification
Number
Product
Name
Product Price
Availability
Status
Type
Identification
No.
Product type
identification
number
Product Type

Customer
identification
number
CUSTUMER
CUS_NAME Customers
name
CUS_ADD
Customer
Address
CUS_ID
Customer
identification
number
CUSTOMER_HAS P_ID
Product
_PRODUCT
identification
number
P_QTS
Product
quantity

Type
INT

Size Constraint
11
Auto_Increment
PK

VARCHAR 20

Not NULL

DECIMAL 8, 2
VARCHAR 10

Not NULL

INT

11

Not NULL
FK

INT

11

Auto_Increment
PK

VARCHAR 20

Not NULL
Unique
Auto_Increment
PK

INT

11

VARCHAR

25

Not NULL

VARCHAR 45

Not NULL

INT

11

Not NULL
PK FK

INT

11

Not NULL
PK FK

INT

20

Not NULL

I_ID

INVENTORY

RMN_STK
P_ID

Inventory
identification
number
Remaining
Stocks
Product
Identification
number

INT

11

Auto_Increment
PK

INT

11

INT

11

Not NULL,
Unique
Not NULL
FK

CHAPTER II
Implementation and Loading
List all CREATE, INSERT commands used to develop the database
(inclusive PK and FK)

List of all CREATE Commands


CREATE DATABASE MYSQLINVENTORY;
USE MYSQLINVENTORY;
CREATE TABLE TYPE
(
T_ID INT AUTO_INCREMENT,
P_TYPE VARCHAR (20) NOT NULL UNIQUE,
PRIMARY KEY (T_ID)
);

CREATE TABLE PRODUCT


(
P_ID INT AUTO_INCREMENT,
P_NAME VARCHAR (45) NOT NULL UNIQUE,
P_PRICE DECIMAL (8, 2) NOT NULL,
P_STATUS VARCHAR (10) NOT NULL,
T_ID INT NOT NULL,
PRIMARY KEY (P_ID),
FOREIGN KEY (T_ID) REFERENCES TYPE (T_ID)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE CUSTOMER
(
CUS_ID INT AUTO_INCREMENT,
CUS_NAME VARCHAR(25) NOT NULL,
CUS_ADD VARCHAR(45) NOT NULL,
CUS_CONTACT VARCHAR(20) NOT NULL,
PRIMARY KEY(CUS_ID)
);

CREATE TABLE INVENTORY


(
I_ID INT AUTO_INCREMENT,
P_ID INT NOT NULL,
PURCHASE_QTY INT(10) NOT NULL,
PURCHASE_PRICE DECIMAL(8, 2) NOT NULL,
SOLD_QTY INT(10) NOT NULL,
REMAINING_PRODUCT INT(10) NOT NULL,
UNIT_PRICE DECIMAL(8,2) NOT NULL,
SALES DECIMAL(8, 2) NOT NULL,
INCOME DECIMAL(8,2) NOT NULL,
PRIMARY KEY (I_ID),
FOREIGN KEY (P_ID) REFERENCES PRODUCT (P_ID)
ON DELETE RESTRICT ON UPDATE CASCADE
);

CREATE TABLE CUSTOMER_has_PRODUCT


(
CUS_ID INT NOT NULL,

P_ID INT NOT NULL,


P_QTY INT (11) NOT NULL,
PRIMARY KEY (CUS_ID, P_ID),
FOREIGN KEY (CUS_ID) REFERENCES CUSTOMER (CUS_ID)
ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (P_ID) REFERENCES PRODUCT (P_ID)
ON DELETE RESTRICT ON UPDATE CASCADE
);

List of all INSERT Commands:

INSERT INTO TYPE (P_TYPE) VALUES


("ACCESSORIES"),
("CONSUMABLES"),
("EXTERNAL COMPONENTS"),
("INTERNAL COMPONENTS"),
("Maintenance");
INSERT INTO PRODUCT (P_NAME, P_PRICE, P_STATUS, T_ID) VALUES
("BLOWER", 33, "IN STOCK", 5),
("BRUSH", 25.23, "IN STOCK", 5),
("CD-ROM", 10.97, "IN STOCK", 2),
("CMOS BATTERY", 15.56, "IN STOCK", 4),
("DVD DRIVE", 250.11, "IN STOCK", 4),
("FLASH DRIVE", 300.12, "IN STOCK", 1),
("HARD DISK DRIVE(EX)", 1000.11, "IN STOCK", 3),
("HARD DISK DRIVE(IN)", 1000.16, "IN STOCK", 4),
("HDMI CORD", 350.05, "IN STOCK", 2),
("HEADPHONE", 500.58, "IN STOCK", 1),
("HEADSET", 225.65, "IN STOCK", 1),
("INK CARTRIDGE", 300.45, "IN STOCK", 2),
("INK REFILL", 125.45, "IN STOCK", 2),
("KEYBOARD(EX)", 400.12, "IN STOCK", 3),
("KEYBOARD(IN)", 160.34, "IN STOCK", 4),
("KEYBOARD PROTECTOR", 100.89, "INSTOCK", 5),
("LAPTOP BAG", 1000.33, "IN STOCK", 1),
("LAPTOP STICKER", 50.99, "IN STOCK", 1),
("LCD", 6000.89, "IN STOCK", 4),
("LCD SCREEN PROTECTOR", 180.66, "IN STOCK", 5),
("LCD SPRAY", 100.33, "IN STOCK", 5),
("LCD WIPE", 50.34, "IN STOCK", 5),
("MONITOR", 4000.22, "IN STOCK", 3),

("MOTHERBOARD", 5238.12, "IN STOCK", 4),


("MOUSE(EX)", 235.21, "IN STOCK", 3),
("MOUSE(IN)", 150.32, "IN STOCK", 4),
("NETWORK CARD", 2000.00, "IN STOCK", 4),
("POWER CORD", 135, "IN STOCK", 2),
("POWER SUPPLY UNIT", 800.93, "IN STOCK", 4),
("PRINTER", 4350.22, "IN STOCK", 3),
("PROCESSOR", 5005.88, "IN STOCK", 4),
("RAM", 1500.11, "IN STOCK", 4),
("SATA", 75.00, "IN STOCK", 2),
("SPEAKER", 225.80, "IN STOCK", 1),
("SYSTEM UNIT CASE", 750.21, "IN STOCK", 1),
("VGA CARD", 2500.12, "IN STOCK", 4),
("VGA CORD", 150.51, "IN STOCK", 2);

INSERT INTO CUSTOMER (CUS_NAME, CUS_ADD, CUS_CONTACT) VALUES


("ALAMIS, JEROME", "CATMON, NAVAL, BILIRAN",09275367289),
("ATIGA, MONALIZA", "MANILA",09128645373),
("BENTOR, PAUL MATHEW", "NAVAL, BILIRAN",09983453773),
("EBLACAS, ANGELO", "AGPANGI, NAVAL, BILIRAN",09053755530),
("GONZAL, CATHY JANE", "BOOL, CULABA, BILIRAN",09154235075),
("HOLANDA, BEJAY", "LEYTE, LEYTE",09064709358),
("JUNTILLA, ALBERTO", "P.S. EAMIGUEL, NAVAL, BILIRAN",09100929677),
("MOCORRO, MARRY LUZ", "NAVAL, BILIRAN",09064708893),
("NAPALA, GERALD DOMINIC", "NAVAL, BILIRAN",09217368410),
("NARTIA, ELLEN JOYCE", "HAGUIKHIKAN, NAVAL, BILIRAN",09217606083),
("NIERRAS, MARK LENDON", "BILIRAN, BILIRAN",09154235075),
("ROMAGOS, JEFFREY", "NAVAL, BILIRAN",09082718982),
("ROSALEZ, MAE PEARL", "BATO, BILIRAN, BILIRAN",09097763887),
("SABOCOHAN, JERIC", "AGPANGI, NAVAL, BILIRAN",09354563889);
INSERT INTO CUSTOMER_has_PRODUCT (CUS_ID, P_ID, P_QTY) VALUES
(1, 8, 1),
(1, 13, 3),
(1, 15, 1),
(1, 21, 1),
(1, 27, 5),
(2, 24, 2),
(2, 25, 3),
(2, 29, 4),
(3, 12, 6),
(4, 23, 1),
(5, 34, 1),
(5, 1, 3),

(6, 23, 5),


(6, 31, 5),
(7, 29, 9),
(8, 31, 10),
(9, 34, 3),
(9, 35, 1),
(9, 36, 4),
(10, 8, 5),
(11, 9, 21),
(12, 12, 19),
(12, 13, 14),
(13, 18, 16),
(14, 25, 12),
(14, 26, 2);

INSERT INTO
INVENTORY(P_ID,PURCHASE_QTY,PURCHASE_PRICE,SOLD_QTY,UNIT_P
RICE) VALUES
(1,100,25.00,25,33.00),
(2,100,20.01,12,25.23),
(3,100,7.03,50,10.97),
(4,100,10.11,22,15.56),
(5,100,170.89,44,250.11),
(6,100,215.11,25,300.12),
(7,100,825.12,23,1000.11),
(8,100,800.56,34,1000.16),
(9,100,220.90,77,350.05),
(10,100,370.88,66,500.58),
(11,100,150.44,20,225.65),
(12,100,190.90,20,300.45),
(13,100,99.20,80,125.45),
(14,100,330.23,31,400.12),
(15,100,99.90,60,160.34),
(16,100,89.12,21,100.89),
(17,100,850.34,43,1000.33),
(18,100,39.90,10,50.99),
(19,100,4525.77,20,6000.89),
(20,100,90.99,10,180.66),
(21,100,80.67,20,100.33),
(22,100,39.89,41,50.34),
(23,100,3090.78,19,4000.22),
(24,100,4454.88,11,5238.12),
(25,100,169.67,50,235.21),

(26,100,91.32,60,150.32),
(27,100,1880.65,12,2000.00),
(28,100,99.78,32,135.00),
(29,100,723.12,10,800.93),
(30,100,3990.78,90,4350.22),
(31,100,4878.34,32,5005.88),
(32,100,998.78,21,1500.11),
(33,100,58.11,45,75.00),
(34,100,189.32,34,225.80),
(35,100,667.23,23,750.21),
(36,100,1987.89,22,2500.12),
(37,100,99.90,87,150.51);
CHAPTER III
Testing and Evaluation
Write 15 different queries on your database, using the SELECT, FROM, AND WHERE
keyword. Your 15 queries should preferably illustrate six (6) different aspects of
database querying as below:
TWO (2) queries involving relation from two tables.
Queries involving each of aggregate functions (SUM, COUNT, AVG, MAX, MIN.)
ONE (1) query involving complicated selects and joins from three or more tables.
TWO (2) queries involving NOT and BETWEEN functions.
TWO (2) queries involving GROUP BY and HAVING functions.
TWO (2) queries that require the use of the DISTINCT and ORDER BY
keywords.
Two queries involving relation from two tables.
First query:
SELECT
P_NAME AS 'Product Name',
P_TYPE AS 'Type'
FROM
PRODUCT,
TYPE
WHERE PRODUCT.T_ID = TYPE.T_ID;
Second query:
SELECT
P_NAME AS 'Product Name',
RMN_STK AS 'Remaining Stocks'
FROM
PRODUCT,

INVENTORY
WHERE PRODUCT.P_ID = INVENTORY.P_ID ;
Queries involving each of aggregate functions (SUM, COUNT, AVG, MAX, MIN)
Query using SUM aggregate function
SELECT SUM(RMN_STK) FROM INVENTORY;
Query using COUNT aggregate function
SELECT COUNT(*) FROM CUSTOMER;
Query using AVG aggregate function
SELECT AVG(P_Price) FROM PRODUCT;
Query using MAX aggregate function
SELECT MAX(P_Price) FROM PRODUCT;
Query using MIN aggregate function
SELECT MIN(P_Price) FROM PRODUCT;

Query involving complicated selects and joins from three or more tables.
SELECT
P_NAME AS 'Product Name',
P_Type AS 'Type',
RMN_STK AS 'Remaining Stock'
FROM
PRODUCT p,
TYPE t,
INVENTORY i
WHERE
p.`T_ID` = t.`T_ID`
AND p.`P_ID` = i.`P_ID`;

TWO (2) queries involving GROUP BY and HAVING functions.


First query:
SELECT
P_TYPE AS 'Product Type' ,

COUNT(P_name) AS 'Product per type'


FROM
PRODUCT p,
TYPE t
WHERE p.`T_ID` = t.`T_ID`
GROUP BY t.`P_TYPE`;

Second query:
SELECT
P_TYPE AS 'Product Type' ,
COUNT(P_NAME) AS 'Product per type'
FROM
PRODUCT p,
TYPE t
WHERE p.`T_ID` = t.`T_ID`
GROUP BY t.`P_TYPE`
HAVING COUNT(P_NAME) > 1;

TWO (2) queries involving NOT and BETWEEN functions.


First query:
SELECT P_Name, P_Price FROM PRODUCT
WHERE P_Price BETWEEN 100 AND 500;
Second query:
SELECT P_Name, P_Price FROM PRODUCT
WHERE P_Price NOT BETWEEN 100 AND 500;

TWO (2) queries that require the use of the DISTINCT and ORDER BY keywords.
First query:
SELECT DISTINCT
P_NAME AS 'Product',
P_Type AS 'Product Type',
RMN_STK AS 'Remaining Stocks'
FROM
PRODUCT p,
TYPE t,
INVENTORY i

WHERE p.`T_ID` = t.`T_ID`


AND p.`P_ID` = i.`P_ID`;
Second query:
SELECT P_Name, P_Price FROM PRODUCT
ORDER BY P_PRICE DESC;

CHAPTER IV
Future Enhancement
While the system itself is almost comprehensive at as it is, there are a lot of
rooms for improvement. First is to add an attribute to determine the description of the
product. It helps to identify which product should be brought.
For visual purposed, a photo attribute should also be included for the product
entity. This guide the selection process for particular situation.
Some product doesnt last long enough like the inks so it is also important to add
another attribute for the date of expiration. This will not only serves as guide in
refreshing the stocks but also exclude the product from selling expired products.

You might also like