Professional Documents
Culture Documents
Sales and Inventory System For Chain Stores PDF
Sales and Inventory System For Chain Stores PDF
ICT499 CAPSTONE PROJECT COURSE
SALES AND INVENTORY SYSTEM FOR CHAIN STORES
(AMUSEMENT CENTER)
FINAL REPORT
JANUARY 2008
NAME: LEE CHANGJIN
PI: K0604033
PROJECT CODE: JAN08/BHICT/03
TUTOR: MS NORSHIDA SELAMAT
SUBMISSION DATE: 24th OCTOBER 2008
LEE CHANGJIN (K0604033) JAN08/BHICT/03
ABSTRACT
Methods of data storing and data processing are crucial to every business. Usually,
companies overlooked the process of deriving the data. As long the data is obtained, how it
is obtained really does not matter anymore. Some companies are still using papers with
some usage of office related programs like Microsoft Words or Excel to store or process
data. Using papers to process data can be time consuming and inefficient.
This project is to demonstrate the how database system can be used to better manage and
process data using stored procedures and triggers. The strategy adopted to achieve the
objectives includes project management to better monitor and plan for the project progress,
adopting of the database application lifecycle to develop the database system, reference
and review of literatures to improve on completing this project.
MySQL is used as the DBMS for this project. This project provides details on the EAR Model
of the database system. Triggers and stored procedures are written and tested to fulfill the
system objectives and any enterprise constraints.
This project only covers the designing and testing of the database system. To be able to
implement into usable system still need integration to GUI application. Businesses using
database system the right way, should help to automate tedious manual tasks, making
processing data more efficient and with great chance, minimize any human errors in the
manual tasks. Areas such as security issue and distributed system deployment can be looked
into in the future to improve on this project.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
2 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
ACKNOWLEDGEMENTS
I would like to take this opportunity to express my deepest gratitude to the following
individuals who have given me tremendous support and help in completing my Final Year
Project.
‘Thank you, Ms Norishida Selamat.’
It is a pleasure to have Ms Norishida as my project supervisor, a great tutor with patience
and thoughtfulness. With her worthy advice and invaluable guidance, she has guided me on
this journey to complete my Final Year Project.
I would like to thank Aidan Wee who used to be the business manager of Valibel
Technologies Pte Ltd. He had shared with me the limitation of the amusement center
operation and provided useful information to aid me in my project. Through him, I have
gotten my project title and system objectives.
I would like to thank my business partner for his extended understanding and abundant
patience he has had given me, allowing me to have a balanced commitment between my
Final Year Project and my startup business.
Finally, I must thank my Mom and Dad for their loving care and inestimable morale support
throughout this bumpy year.
‘Love ya, Mum & Dad!’
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
3 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
CDROM REPORT
This report includes a CD with the following contents.
1) Final Year Report – ICT499_K0604033.doc
2) Gantt Chart – gantt_chart_K0604033.xls or gantt_chart_K0604033.pdf
3) The full schema – full_schema.sql
4) Test script to populate the database – test_script.sql
5) Backup database – k0604033_backup.sql
6) Acrobat Reader 9.0 Installer
7) MySQL Community Server 5.0 Installer
8) MySQL GUI Tools 5.0 Installer
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
4 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
TABLE OF CONTENTS
ABSTRACT .................................................................................................................................. 2
ACKNOWLEDGEMENTS ............................................................................................................. 3
CD‐ROM REPORT ....................................................................................................................... 4
TABLE OF CONTENTS ................................................................................................................. 5
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
6 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
LISTS OF FIGURES AND TABLES
FIGURE 1.1 THE DATABASE DEVELOPMENT LIFECYCLE FOR THE PROJECT. 13
FIGURE 1.2 THE NETWORK DIAGRAM USED DURING THE PROJECT 19
FIGURE 1.3 CRITICAL PATH 20
FIGURE 2.1 ER DIAGRAM 21
FIGURE 4.1 CREATE TABLE STATEMENT FOR FACILITY 35
FIGURE 4.2 TRIGGER STATEMENT FOR BEFORE_FACILITY_UPDATE 37
FIGURE 4.3 STORED PROCEDURE STATEMENT FOR ADDSALES 40
FIGURE 4.4 FUNCTION STATEMENT FOR CALCULATEPAYABLE 41
FIGURE 4.5 VIEW CREATE STATEMENT FOR FACILITYCENTERPROMOVIEW 42
FIGURE 5.1 SUCCESSFUL INSERT INTO TABLE FACILITY BY OMITTING THE PRIMARY KEY. 43
FIGURE 5.2 SUCCESSFUL INSERT INTO TABLE FACILITY USING NULL FOR PRIMARY KEY. 43
FIGURE 5.3 UNSUCCESSFUL INSERTING OF DATA INTO TABLE FACILITY. 44
FIGURE 5.4 UNSUCCESSFUL INSERT INTO TABLE FACILITY USING INVALID FOREIGN KEY. 44
FIGURE 5.5 UNSUCCESSFUL INSERT INTO TABLE FACILITY USING WRONG DATA TYPE. 45
FIGURE 5.6 UNSUCCESSFUL INSERT WITH REFERENTIAL INTEGRITY ERROR FOR CARDINALITY
CHECKING. 46
TABLE 1.1 WORK BREAKDOWN STRUCTURE 18
TABLE 2.1 ENTITY DEFINITION & DESCRIPTION 24
TABLE 2.2 RELATIONSHIP DESCRIPTION 25
TABLE 2.3 ATTRIBUTE DESCRIPTON FOR FACILITY 26
TABLE 2.4 ATTRIBUTE DESCRIPTION FOR ARCADE 26
TABLE 2.5 ATTRIBUTE DESCRIPTION OF GAME 27
TABLE 2.6 ATTRIBUTE DESCRIPTION FOR INVENTORY 27
TABLE 2.7 ATTRIBUTE DESCRIPTION FOR INVENTORYLOG 27
TABLE 2.8 ATTRIBUTE DESCRIPTION FOR CENTER 27
TABLE 2.9 ATTRIBUTE DESCRIPTION FOR PROMOTION 28
TABLE 2.10 ATTRIBUTE DESCRIPTION FOR CENTERPROMOTION 28
TABLE 2.11 ATTRIBUTE DESCRIPTION FOR SALES 29
TABLE 2.12 ATTRIBUTE DESCRIPTION FOR LANBILLIARDSALES 29
TABLE 2.13 ATTRIBUTE DESCRIPTION FOR ARCADECARDSALES 29
TABLE 2.14 ATTRIBUTE DESCRIPTION FOR ARCADECARD 30
TABLE 2.15 ATTRIBUTE DESCRIPTION FOR MEMBER 31
TABLE 2.16 ATTRIBUTE DESCRIPTION FOR REDEEMITEM 31
TABLE 2.17 ATTRIBUTE DESCRIPTION FOR REDEMPTION 32
TABLE 4.1 TRIGGERS DESCRIPTION AND SCOPE 37
TABLE 4.2 STORED PROCEDURE DESCRIPTION AND SCOPE 39
TABLE 5.1 CODES THAT FULFILL INVENTORY SYSTEM OBJECTIVES 47
TABLE 5.2 CODES THAT FULFILL SALES SYSTEM OBJECTIVE 47
TABLE 5.3 CODES THAT FULFILL MEMBER SYSTEM OBJECTIVES 48
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
7 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1. INTRODUCTION
1.1. PROJECT TITLE
I had chosen ‘Design and Implementation of a Database’ as my project track. This is due to
my interest in data management and I want to learn how I can manage data with a database
to provide useful yet relevant data for a specific need from a user. It is interesting to
discover how a database system can store such gigantic amount of data and yet still able to
sort out relevant data within seconds with just a few lines of query scripting.
The project title that I will be working on is as titled: Sales and Inventory System for Chain
Stores (Amusement Center).
1.2. PROJECT AIMS
In general, by undergoing this project, it allows me to access my standards in planning and
managing a project and apply what I have had learnt in UniSIM. Setting my criteria and
schedule to develop this project and fulfilling them is a challenging experience for me.
During the process of this project, I am able to identify my weaknesses in the various stages
of project management. By knowing these weaknesses, improvement plans were made and
scheduled by me to improve on my weak areas. Thus, the experience and knowledge gained
by doing this project definitely helps me be better in my project management skill in further
projects.
A database system is widely used to provide a central control of data where the data is
accessed and used by multiple users for different purposes. Different users might need the
same data for different purposes. Hence, by developing a database solution, it should solve
and enhance the operational limitation faced by the company. The company should be able
to manage its data more efficiently with the database system.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
8 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1.3. CONTEXT BACKGROUND
Introduction
Valibel Technologies Ptd Ltd is one of the pioneers in the family entertainment business.
Incorporate in 1983, Valibel aims to excel in family entertainment and to achieve top
standards in service and products to meet its business goals. Currently, Valibel manages a
chain of 6 amusement centers.
The facilities
These amusement centers can provide up to 3 different types of facilities namely, Arcade
machines, LAN stations and billiard tables. The arcade machines are categories into different
genres such as shooting, racing and sport. Each arcade machines will have its game title and
its credit price for one game play. For LAN stations and billiard tables, customer pays for the
usage by hourly rate.
Inventory
There is an inventory warehouse to hold the facilities. When a facility requires servicing, it is
send to the inventory. After servicing is done, it will be send back to the former center if
required. New facility is send to the inventory before deploying to any centers. The facilities
are either in a center or in the inventory. If a facility needs to be relocated to other center, it
has to be sent back to the inventory first before deploying to the center.
Arcade cards
Arcard cards are sold in all centers. Customers are required to buy arcade cards to play the
arcade machines. Arcade cards are available in different total credit value which cost
differently. For example, a customer pays S$5 for a 6 dollars credit value card.
Promotions
A center can only have one promotion at any one time. The promotion can be for a
particular facility or for the entire center. The promotion will have a start date and end date
as promotion period. A promotion will give a discount off the total bill either by an amount
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
9 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
or by a certain percentage with minimum spending. Promotions are strictly not applicable to
member.
Sales
Sales record is generated when customers buy arcade cards or pay for LAN/billiard usages. If
the customer is a member, the customer will enjoy member pricing if any. The sales of the
arcade cards are recorded down on a piece of sales report form by the respective counter
staff of each center. The forms are collected from each center and send to the main office
for accounting at the end of the day. The sales of the LAN stations and billiard tables are
managed by a Marco32 system where the respective counter staff prints the sales receipt of
each center at the end of the day. The sales receipts are also collected and send to the main
office for accounting at the end of the day.
The sales records from these forms and receipts are then keyed into Excel sheet for better
management of the sales data and accounting purpose.
Membership
A customer can become a member by filling up the membership form. Information to be
captured includes member number, name, identity number (i.e. NRIC or passport number),
gender, date of birth, address, contact, email and occupation. For every facility a member
has spent on, the member will earn member points. Member can use to points to redeem
for gift items and other prizes. Member points will be reset back to zero when the member
expiry point date has past.
1.4. SYSTEM DEFINITION
A centralize system
Valibel has plan for a centralize system to quicken its operations.
An inventory system that can keep records on which facility has been send back for
servicing and where a particular facility is previously allocated and when is that action
executed. A logging feature to log every event in the inventory for tracking purposes.
A sale system that is used to manage the sales records of the arcade cards, as well as
sales records of LAN station and billiard table usage. The sales system will be able to
facilitate any member rates or promotions.
A member system used to manage the member points and redemption of items.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
10 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1.5. SYSTEM OBJECTIVES
The system objectives are represented in the brackets as the respective modules alias which
will be use in this report to represent a particular system objective. For example, the system
objective of Inventory System point 1 will be represented as ‘IS: Point 1’.
Inventory System (IS)
1. The system will be able to add new facility records into the inventory. The system will
log this event.
2. The system will be able to change where the facility is to be deployed. If facility is
currently in a center, changing the center will move the facility to the inventory to be
redeployed. The system will log this event.
3. The system will be able to move facility records from centers that require maintenance
servicing back to the inventory. The system will log this event.
4. The system will be able to move facility record back to the center it should be deployed
to when the maintenance servicing is done. The system will log this event.
Sales (SA)
1. The system will be able to register one particular promotion to a center.
2. The system will be able to ensure that a center can only have one promotion at any one
time.
3. The system will be able to generate sales record on
a. A normal basis when there is no promotion and the customer is not a member.
b. A promotion basis if the center is having a promotion.
c. A membership basis if the customer is a member.
4. The system will be able to ensure that the promotion privilege will not be applicable if
the sale is from a member.
Member (ME)
1. The system will be able to accumulate the member points for any sales generated by
member where for every S$0.10 spent, 1 point will be accumulated.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
11 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
2. The system will be able to ensure that the member has sufficient member points for
deduction before registering any redemption made by the member.
3. The system will be able to reset the member points back to zero when the member
point expiry date has past. A new member point expiry date will be extended by 1 year.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
12 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1.6. METHODOLOGY ADOPTED
Every project adopts a certain SDLC as it adheres the important phases that are essential for
developers namely planning, analysis, design, implementation and testing. In figure 1.1
shows a similar to SDLC structure which I am be adopting for my project. This is a database
development lifecycle which I referenced from the book ‘Database System’ on page 272. I
have tailored the development lifecycle to use it as a guideline for my project. In figure 1.1
shows my database development lifecycle.
Gathering of User
Requirements
Database Design
Analysis of
Requirements
Database System
Definition
Conceptual Design
Logical Design
Physical Design
Database Testing
Figure 1.1 The database development lifecycle for the project.
During the requirement gathering phase, I conducted an interview with the business
development manager. I brainstormed some questions to ask which I have appended in the
Appendix D: OTHERS, and shortlist the critical ones for the interview. Through the interview
and some chatting I have a better understand of the company background and operation
flow. I have obtained 2 forms related to the company operation namely the membership
registration form and the sales tracking form. Refer to appendix for the form.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
13 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
With the requirements then defining the system definition and objectives, I begin on
conceptual designing of the database system. I had done revision and reference to have a
better idea on how to do the E‐A‐R (Entity‐Attribute‐Relationship) model. It involved
defining the entities, each entry’s attributes, the relationship between the entities and their
description. I had iterated at this stage a few time due to changes on the E‐A‐R model.
Logical design stage is where I done the relationship headings and finalizing the details to
begin on designing and creating the schema.
As I am not very good with triggers and stored procedures, I did research and referencing on
books to websites. I was lucky to found a good book, ‘Pro MySQL’, which gives excellent
example of creating triggers and stored procedures. Well doing the codes, small testing is
done to see if the code works. I did not complete all the codes and script before moving to
testing stage. What I did was that after finish the inventory system, I jumped into testing the
inventory system and went back to debug if bugs were found. This process iterates for a few
times before I move on to the next module, sales system and so on. I used the same method,
for the next two parts of the database system. Once I done all of them, I did a whole system
check again to see if there is any loopholes or bugs that I had missed. Indeed, bugs were
found and I had to go back to the concerns area to solve the bugs.
In a way, a lot of iteration from various stages to precedent stage occurred where changes
were made and fine tuning was done to the database system. Until all the system objectives
are fulfilled and test, that is when I worked on my report. From there I did research and
referencing on how to write a good report.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
14 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1.7. RESOURCES USED
I have had visited National Libraries and SIM’s library for research and revision. Some of the
books that I had borrowed were used for literature research, while some others were used
to gain more knowledge and revise on my relevant experiences to do this project. National
Libraries provide a wider range of books for reference which some which I required cannot
be found in SIM library.
However, SIM Library does provide other materials which National Libraries do not have.
SIM Library has provided a collection of past Capstone Project Reports which I have
referenced for the content structure and how past project students did their report. These
reports that I have referenced gave me an insight of the standard of the report and how I
can improvise when doing mine.
Other then libraries, I have use the internet to search for relevant information for further
research. Surfing on internet is like a treasure hunt. With Google’s powerful search engine, I
am able to find worthy websites for reference.
A computer with the necessary software installed is crucial for this project too. Luckily, I
have a laptop with Microsoft Office installed. Hence, I can work on my report even at night.
Though SIM does provide work station for students to use, it is definitely more flexible and
easier with one that I own it. Towards the end of the project, I will prepare my presentation
on my laptop.
As I am using MySQL as my DBMS, I would need to download and install MySQL Community
Server. I have chosen MySQL as this DBMS is an open source database and is proclaimed to
be the world’s most popular open source database by the global community. Other then it is
free, I have some experience using it since my polytechnic days. I have also installed MySQL
GUI Tools to assist me in managing my database for this project. It provides GUI features for
me to interact with the DBMS with much ease.
Meeting room or study area is also one of the resources required. I have had monthly
meeting with my tutor to follow up the project status and enquire for my tutor’s advice. Our
tutor will book a meeting room in SIM for the monthly meeting. Once in a while, I would
meet up with other students doing the 499 capstone project to share and help each other.
We usually meet up in SIM and grab any available study area or use the open lab session
available.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
15 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1.8. LITERATURE REVIEW
For more information regarding the materials that I have referenced, refer to ‘Reference’
section at the end of this report.
Database Systems (Book)
I found this book in the UniSIM library when looking for database related information for my
project. This book provides a lot of information which I used it to guide me in doing the
project.
First, my SDLC is derived from this book, Chapter 9, section 9.2, The Database Application
Lifecycle. I reference the diagram on page 272 and used it as a guidance to structure my
SDLC. In the end, I used its term Database Application Lifecycle instead of SDLC. The
Database Application Lifecycle is similar to of a SDLC which consist the requirement
gathering, designing and testing of the system.
I also reference chapter 11, Entity‐Relationship Modeling to get some guideline to work on
my ER diagram. Particularly on Section 11.3, Attributes, to familiarize with the different type
of attributes namely single, composite, multi‐valued, derived and keys.
However, this book is useful for my conceptual design where it help me plan and set my ER
model. It does not provide much help in trigger and stored procedure which I will need to
get familiarizes to work on my physical design stage of the database system. It is not a
wonder book but it did help me get started.
Pro MySQL (Book)
During my ICT 315 course in school, trigger and stored procedure is taught only on the
surface, we were taught to know the pseudo code for the trigger but not really go in depth
to try it. Hence, trigger and stored procedure is one area I must research on. This book is
introduced to me by my friend, as I was asking around if there are any good books which
teach trigger and stored procedure on MySQL. I managed to find it in West Mall National
Library.
On the cover, it quotes ‘The Expert’s Voice In Open Source’. Indeed, it gives me great details
on creating triggers, stored procedure and more. All my codes would not be possible without
this book. I had tried out their example trigger and stored procedure before working on
mine. Chapter 9, Stored Procedures, Building Stored Procedure on Page 354, teaches the
creating of stored procedure in a step by step explanation which I followed closely. Same for
Chapter 10 on Functions and Chapter 11 on Triggers, it guided me on creating my SQL
schema.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
16 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
If someone is learning how to use trigger, stored procedure and functions on MySQL, I will
surely recommend this book to him/her. It is a book that covers a very specific area; people
with specialized need on MySQL will find it very useful. This book has given my great
assistance in completing my physical design and SQL schema. From there, I was able to move
on to testing the schema.
MySQL 5.0 Reference Manual
This manual is one material I cannot miss out as I want to know more about MySQL. It covers
most of the general information about MySQL. As it is available easily online, I just need an
internet connection browse it or I can even download it to my computer.
I referenced chapter 10, Data Type, which give a general description, enough for understand
and application, of all the data type used in MySQL. There is where I found the usage of
string data type ENUM will only give a value from a list of values.
Chapter 12 SQL Statement syntax, 12.1.9 Create Table syntax, is a section I used to check my
CREATE statement and for explanation in my report. I also reference other section on
CREATE trigger syntax, stored procedure and functions. Anyway in my opinion, it is just a
reference manual without good example and explanations.
It is a good source to get to know MySQL and provide some general information to the area I
am looking for. However, if I want to know more in depth information on a specific area, I
will need to source for better materials.
A Guide to the Project Management Body of Knowledge (Book)
I got to know this book from my ICT 317 course. It is given to me on the last day of course.
Though the publication is four years ago, it is still a very good book on project management.
I referenced on the chapter, Project Scope Management on page 103 to page 118 on the
guidelines to plan my project scope and derive my work breakdown structure (WBS). Some
reference on page 131 to know more about network diagram.
Though the book does give good knowledge of project management but it serves more like
guidelines to me. As this project is a one man show instead of a team, the book is good for
theories reading, not for trying them out.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
17 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
1.9. PROJECT MANAGEMENT
Work Breakdown Structure
This is the work breakdown structure after the completion of the project without the potion
on the initial report and presentation.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
18 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Network Diagram
Conceptual Logical Design
Design
Physical Design Database Testing
Create Table Test Create
Statements Table &
populate data
Triggers Test Triggers
Statements Statements
Stored Test Stored
procedure procedure
Statements Statements
Function Test Function
Statements Statements
View Test View
Report
Statements Statements
Figure 1.2 The network diagram used during the project
I did not follow the tasks in order as shown in the WBS when doing the tasks. Instead, I
broke up Task 3 Physical Design and Task 4 Database Testing into smaller specific tasks as
shown in the network diagram. Upon completing the sub task of Physical Design, I moved to
test the sub task. For example, after Task ‘Create Table Statements’ was done, I move to the
Task ‘Test Create Table & Populate Data’.
I chose to do it this way because it is more feasible to complete one component and test it
before moving to the next component. Completing all the sub tasks in Physical Design then
move on to testing might take me more time to test. Imagine, when there is a bug, I need to
check all the sub tasks if I do not know where the bug is from.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
19 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Completing a sub task and then test it gives me the option to trial and error the sub task and
perfect it before moving to the next one. Instead of completing task by task listed in the
WBS, I completed by fulfilling system objective by system objective. The pattern of doing it
can be seen on the Gantt chart. Please refer to Appendix C: Gantt chart.
Critical Path
Physical
Design
Conceptual Logical Design Report writing
Design
Database
Testing
Figure 1.3 Critical Path
By doing the Physical Design and Database Testing concurrently, this is my critical path. From
the Gantt chart, I took much more time to complete the testing from the estimated as I
spent some time debugging my code. Partly is due to me not familiar with trigger and stored
procedure.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
20 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
2. CONCEPTUAL DESIGNING
2.1. ER DIAGRAM
Inventory
InventoryLog facilityNo{PK}
facilityNo{PK} toDeployAt
invLogDatetime{PK} 1..N
invDescription 1..1
stores
willHave 1..N Arcade
1..1 Facility facilityNo{PK}
facilityNo{PK}
1..N facilityType {Optional} 1..N
has facilityStatus plays
normalPrice 1..1
memberPrice Game
gameNo{PK}
1..1 gameTitle
creates
1..1 genre
Center ArcadeCardSales
1..1 1..N salesNo{PK} 1..N
centerNo {PK}
name LanBilliardSales
make 1..N salesNo{PK}
1..1 startTime
endTime
relatesTo
hosts
{Mandatory, Or}
1..1
ArcadeCard Sales
1..N arcadeCardNo{PK} salesNo{PK}
CenterPromotion normalCardPrice salesType
centerNo{PK} memberCardPrice salesDatetime
promotionNo{PK} cardValue amtPayable
startdate{PK}
1..N
enddate{PK}
1..N generates
1..1
Redemption Member
appliesTo
memberNo{PK memberNo {PK}
1..1 redeemItemNo{PK} name
1..N 1..1
redeemDatetime{PK} identityNo
Promotion makes
promotionNo{PK} gender
1..N
description dob
rateType belongsTo address
rate email
1..1
minSpent contact
RedeemItem occupation
promoType redeemItemNo{PK}
memberCardNo
redeemDesc
joinedDate
pointsCost
points
pointsExpiry
Figure 2.1 ER Diagram
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
21 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Constraints:
1. A new facility must be deployed to the inventory first.
2. A facility must be sent back to the inventory first before deploying to other center.
3. If the value of toDeployAt of table Inventory is not null, the value must exist as a value
of CenterNo of table Center.
4. A center can only have one active promotion at any one time.
5. Member points will be reset to ‘0’ when the point expiry date is past.
6. Member point expiry date is extended for a year upon expiry.
7. Member points cannot be negative.
8. Redemption is not applicable if the member does not have sufficient points for
deduction.
Assumption:
1. A facility not allocated to any center must be in the inventory.
2. Member rate is used instead of the promotion rate when a member pays in a center
which is having a promotion.
3. For every $0.10 spent by a member, 1 point is award to the member.
The constraints and assumptions are mostly derived from the system objectives.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
22 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
2.2. ENTITY DEFINITION & DESCRIPTION
Entity Definition/Description
Arcade (facilityNo)
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
23 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Table 2.1 Entity Definition & Description
2.3. RELATIONSHIP DESCRIPTION
Relationship Description/Justification
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
24 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
A Center must have at least one Facilities but Facility must be either
in an Inventory or Center.
A Member can generates many Sales, but a Sales need not be from
a Member.
Table 2.2 Relationship Description
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
25 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
2.4. ATTRIBUTE DESCRIPTION
Facility
facilityNo
Primary key of each facility Int(10) No
Either:
‘lan’ for LAN station,
facilityType Enum(‘lan’,’bill’,’arc’) No
‘bill’ for Billiard table,
‘arc’ for Arcade machine
Either:
facilityStatus ‘0’ for Maintance, Enum(‘0’,’1’) No
‘1’ for Operational
Table 2.3 Attribute Descripton for Facility
Arcade
facilityNo
Primary key of the facility Int(10) No
Table 2.4 Attribute Description for Arcade
Game
GameNo
Primary key of the game Int(10) No
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
26 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Table 2.5 Attribute Description of Game
Inventory
facilityNo
Foreign key of FACILITY Int(10) No
Table 2.6 Attribute Description for Inventory
InventoryLog
facilityNo
Foreign key of FACILITY Int(10) No
Table 2.7 Attribute Description for InventoryLog
Center
centerNo
Primary key of the center Int(10) No
Table 2.8 Attribute Description for Center
Promotion
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
27 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
promotionNo
Primary key of promotion Int(10) No
promoDescription
Promotion details Text No
Either:
rateType ‘amt’ which means amount. Enum(‘amt’,’per’) No
‘per’ which means percentage.
Minimum spending of a
minSpent customer in order to enjoy this Int(2) No
promotion
Either:
‘lan’ for LAN station,
promoType Enum(‘lan’,’bill’,’arc’,’all’) No
‘bill’ for Billiard table,
‘arc’ for Arcade machine
Table 2.9 Attribute Description for Promotion
CenterPromotion
centerNo
Composite Primary Key Int(10) No
promotionNo
Composite Primary Key Int(10) No
Table 2.10 Attribute Description for CenterPromotion
Sales
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
28 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
salesNo
Primary key of a sales record Int(10) No
Either:
‘lan’ for LAN station,
salesType Enum(‘lan’,’bill’,’arc’) No
‘bill’ for Billiard table,
‘arc’ for Arcade machine
Table 2.11 Attribute Description for Sales
LanBilliardSales
salesNo
Primary key of the sales record Int(10) No
Table 2.12 Attribute Description for LanBIlliardSales
ArcardCardSales
salesNo
Primary key of the sales record Int(10) No
Table 2.13 Attribute Description for ArcadeCardSales
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
29 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
ArcadeCard
arcadeCardNo
Primary key for the arcade card Int(10) No
Table 2.14 Attribute Description for ArcadeCard
Member
memberNo
Primary key for member Int(10) No
name
Name of member text No
identityNo
NRIC or passport number text No
address
Address Text No
email
Email address Text No
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
30 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
contact
Contact number Int(10) No
occupation
Occupation Text No
Table 2.15 Attribute Description for Member
RedeemItem
redeemItemNo
Primary key for redeem item Int(10) No
redeemDesc
Redeem item description Text No
Table 2.16 Attribute Description for RedeemItem
Redemption
memberNo
Composite Primary Key Int(10) No
redeemItemNo
Composite Primary Key Int(10) No
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
31 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Table 2.17 Attribute Description for Redemption
2.5. CHANGES TO EAR MODEL
All the generalization has been removed as I am not familiar or taught to design the
database with generalization. I have combined the child entity to the parent entity. This will
give me new constraints to take care of. For example, game number is mandatory attribute
for facility that is an Arcade but is not needed for facility that is a LAN station or Billiard
table.
This change will be reflected from the relational heading onwards.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
32 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
3. LOGICAL DESIGNING
3.1. RELATIONAL HEADINGS
Changes:
Arcade entity is being merged to Facility entity. This is done to remove generalization
of the entity. The supertype will hold the attributes of the subtype.
Changes:
LanBilliardSales entity and ArcadeCardSales entity are merged to Sales entity.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
34 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
4. PHYSICAL DESIGNING
4.1. CREATE TABLE STATEMENTS
In my ER Diagram, there are a total of 15 entities. After combining the generalised child
entity to its parent, I have 12 entities. Hence, there are a total of 12 CREATE TABLE
statements in my SQL schema. I have picked the CREATE TABLE statements for Facility which
has the most complex code. The rest of the CREATE TABLE statements are more or less
having the same format and structure. For the full SQL schema for this project, please refer
to Appendix A: SQL Schema.
The syntax for CREATE TABLE statements can be easily obtained from MySQL documentation
in MySQL homepage.
Line 1 starts the CREATE TABLE statement for creating the table named ‘facility’.
Line 2 to line 8 defines the column name of the table. Each column name will need to define
the column definitions. Usually the data type, length of data type if any, if it can be NULL or
NOT NULL and if it has a DEFAULT value. UNSIGNED is used to define a numeric data type
that cannot have negative value. AUTO_INCREMENT is used to generate a unique identifier
for new rows, usually used on a primary key column. ENUM is an enumeration string object
data type by MySQL which can only have one value from a list of values.
Line 9 defines the PRIMARY KEY of the table.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
35 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Line 10 and line 11 defines the KEY that need to be indexed for faster retrieval of row.
BTREE, a tree data structure, is the index type used for indexing.
Line 12 and line 13 defines the foreign key constraint for the table.
Line 14 and line 15 defines the referential actions for the foreign key. ON DELETE NO
ACTION defines that no action is to be taken when DELETE statement is executed on the
referenced row that exist in the child row. ON UPDATE CASCADE defines that when UPDATE
statement is executed on the referenced row, the respective child rows matching the foreign
key will be updated as well.
Line 20 defines the DBMS engine for the table. InnoDB is used as it is the engine that obeys
the referential integrity protocol. DEFAULT CHARSET defines the default character set for the
table which uses the UTF8 unicode character set.
4.2. TRIGGER STATEMENTS
The table below defines the triggers used for the system with a brief description of the
trigger usage and its scope.
Trigger Name Description/Scope of trigger
before_facility_insert The trigger to be executed before a record is inserted into
facility table.
1. To erase any center number when creating facility.
2. To erase any game number when facility is not an Arcade.
3. To check if game number is provide when facility is an
Arcade.
after_facility_insert The trigger to be executed after a record is inserted into
facility table.
1. To set the new facility in the inventory (IS: Point 1)
2. Do the logging of this event. (IS: Point 1)
before_facility_update The trigger to be executed before a record is updated in the
facility table.
1. If facility needs maintenance, move the facility to
inventory and log this event. (IS: Point 3)
2. If facility is operational, move the facility back to the
center and log this event. (IS: Point 4)
3. If facility needs to redeploy to another center, send it back
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
36 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
to the inventory first. (IS: Point 2)
after_sales_insert The trigger to be executed before a record is inserted in the
sales table.
1. Add the points from the sales to the member. (ME: Point
1)
Table 4.1 Triggers description and scope
I have picked the trigger before_facility_update which has the most complex code
to explain. The other triggers more or less have the same format and structure.
1. DELIMITER //
2. CREATE TRIGGER `before_facility_update` BEFORE UPDATE ON facility
3. FOR EACH ROW
4. BEGIN
5. SET @facilityStatus = NEW.facilityStatus;
6. SET @facilityStatusOld = OLD.facilityStatus;
7. SET @facilityNo = NEW.facilityNo;
8. SET @centerNo = NEW.centerNo;
9. SET @centerNoOld = OLD.centerNo;
10.
11. IF @facilityStatus = 0 THEN
12. INSERT INTO inventory (facilityNo, toDeployAt)
13. VALUES (@facilityNo, @centerNo);
14. CALL LogInventory(@FacilityNo,@centerNo,2);
15. SET NEW.centerNo = NULL;
16. END IF;
17.
18. IF @facilityStatus = 1 AND @facilityStatus != @facilityStatusOld
THEN
19. SET NEW.centerNo = (SELECT toDeployAt FROM inventory WHERE
facilityNo = @facilityNo);
20.
21. DELETE FROM inventory WHERE facilityNo = @facilityNo;
22. CALL LogInventory(@facilityNo,NEW.centerNo,3);
23. END IF;
24.
25. IF @centerNoOld <> @centerNo AND @facilityStatus = '1' THEN
26. INSERT INTO inventory (facilityNo, toDeployAt)
27. VALUES (@facilityNo, @centerNo);
28. CALL LogInventory(@facilityNo,@centerNo,4);
29. SET NEW.centerNo = NULL;
30. SET NEW.facilityStatus = '0';
31. END IF;
32.
33. END
34. //
35. DELIMITER;
Figure 4.2 Trigger statement for before_facility_update
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
37 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Line 2 starts the create statement for the trigger. BEFORE UPDATE ON defines that the
trigger is to be executed before update is done to the facility table.
Line 3 defines that the scope of the trigger is executed for each row inserted.
Line 4 defines the start of the trigger.
Line 5 to line 9 defines the user defined variables used in the trigger.
Line 10 to line 16 defines the scope of Point 1 mentioned above: If facility needs
maintenance, move the facility to inventory and log this event.
Line 18 to line 23 defines the scope of Point 2 mentioned above: If facility is operational,
move the facility back to the center and log this event.
Line 25 to line 31 defines the scope of Point 3 mentioned above: If facility needs to redeploy
to another center, send it back to the inventory first.
Line 33 defines the end of the trigger.
4.3. STORED PROCEDURE STATEMENTS
The table below defines the stored procedure used for the system with a brief description of
the stored procedure usage and its scope.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
38 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Table 4.2 Stored procedure description and scope
I have picked the stored procedure AddSales to explain, which has the most complex
code.
1. DELIMITER //
2. CREATE PROCEDURE `AddSales`
3. (
4. facNo INTEGER,
5. startTime TIME,
6. endTime TIME,
7. memNo INTEGER
8. )
9. proc:BEGIN
10. SET @price = 0.0;
11. SET @facilityNo = facNo;
12. #Check IF member number is valid. IF not valid, leave procedure.
Only NULL or valid member number is accepted.
13. IF memNo IS NOT NULL THEN
14. IF isMember(memNo) IS NOT NULL THEN
15. SET @memberNo = memNo;
16. SET @Price = getMemberPrice(@facilityNo);
17. ELSE
18. SELECT 'Procedure call ends. Member does not exist. ' AS
Error;
19. LEAVE proc;
20. END IF;
21. ELSE
22. SET @memberNo = NULL;
23. SET @price = getNormalPrice(@facilityNo);
24. END IF;
25.
26. SET @centerNo = getFacilityCenter(@facilityNo);
27. IF @centerNo IS NOT NULL THEN
28. SET @facilityType = getFacilityType(@facilityNo);
29. IF @facilityType != 'arc' THEN
30. SET @amtpayable =
calculatePayable(startTime,endTime,@price,@centerNo,@facilityType,
@memberNo);
31. INSERT INTO sales VALUES
(NULL,@facilityType,NOW(),@amtpayable,@memberNo,startTime,endTime,
@facilityNo,NULL,@centerNo);
32. ELSE
33. SELECT 'Facility type is Arcade. Not Applicable for this
procedure call.' AS Error;
34. END IF;
35. ELSE
36. SELECT 'Facility is in Inventory or invalid.' AS Error;
37. END IF;
38. END proc;
39. //
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
39 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
40. DELIMITER ;
Figure 4.3 Stored procedure statement for Addsales
Line 2 starts the create statement for the stored procedure.
Line 3 to line 8 defines the parameters needed for the stored procedure.
Line 9 defines the start of the stored procedure with proc as the label for the block code.
Line 10 and Line 11 initializes some user defined variables.
Line 13 to Line 24 will set the price for a member or non member and the member number
if any. The codes check if the member number is valid. If member number is not valid,
LEAVE proc statement will exit the block code. Only NULL value or valid member number
is accepted.
Line 26 is used to get the center number of the facility.
Line 27 check if the facility is in a center, then goes to line 28. If not in a center, goes to line
36.
Line 28 gets the facility type of the facility.
Line 29 to line34 checks if the facility type is not an Arcade, then calculate the payable using
function calculatePayable and add the sales record. If it is an Arcade, then shows an
error that this transaction is not applicable for arcade facility.
Line 36 check if facility is not in a center, shows an error that this facility is in inventory.
Line 38 defines the end of this stored procedure.
4.4. FUNCTION STATEMENTS
Functions more or less works the same like stored procedure but function is used to return
one specific value when called. Most of the functions I have are small function call which
returns a value. I have picked the most complex function to explain.
1. DELIMITER //
2. CREATE FUNCTION `calculatePayable` (startTime TIME, endTime TIME,
price DECIMAL(10,2), cenNo INTEGER, facType TEXT, memNo INTEGER)
3. RETURNS DECIMAL(10,2)
4. code: BEGIN
5. SET @centerNo = cenNo;
6. SET @memberNo = memNo;
7. SET @facilityType = facType;
8. SET @promoType = getPromotionType(@centerNo);
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
40 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Line 2 starts the create statement for the function with the parameters needed for the
function.
Line 3 defines the return data type for this function
Line 4 defines the start of the function with code as the label for the block of codes.
Line 5 to 7 defines some user defined values required in the function
Line 8 calls a function to obtain the promotion type.
Line 9 calls a function to obtain the minimum expenditure to qualify for the promotion.
Line 10 calculates the normal payable or member payable for the facility usage.
Line 11 does a few checks to validate if the payable quality for the promotion discount. The
criteria includes that the payable is not from a member, the promotion type is not for an
Arcade, the promotion type matches the facility type and the minimum payable is at least
met.
Line 12 and line 13 gets the promotion rate type and rate respectively.
Line 14 to line 18 calculates the discount to be given.
Line 20 sets the value to be returned
Line 21 returns the value to the caller.
Line 22 defines the end of the function.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
41 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
4.5. VIEW STATEMENTS
Views are used to simplify complex queries. What’s more is that normal SELECT statement
can be executed on the complex query if it is in a View. This make it very handy for coding
functions which I shared by experience in the Critical Review and Reflections section of
Chapter 6 Conclusion. I have created 2 Views.
This View shows the centers which has or does not has a promotion and the details on the
current promotion. Only the current promotion for each center is retrieved. From this view, I
can easily know which facility is in which center or in inventory and what promotion the
center is having for the facility in that center.
I have created functions based on this View. With the facility number, facilityNo, I can
straight away obtain the promotion details if any without the need to know which center the
facility is in or the promotion number.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
42 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
5. DATABASE TESTING
5.1. ENTITY TESTING
For my tables, I have used auto increment for my primary keys. Hence at inserting, I either
omit the primary key column (Figure 5.1) or set value to NULL if I did put it in (Figure 5.2).
Both ways are successful when inserting.
Figure 5.1 Successful insert into table Facility by omitting the primary key.
Figure 5.2 Successful insert into table Facility using NULL for primary key.
When creating the tables, codes are used to define those columns that are primary key. This
allows the DBMS to perform entity integrity checking. The DBMS will capture the error as
shown in Figure 5.3 if there is a duplicate of primary key in the table when inserting data.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
43 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Figure 5.3 Unsuccessful inserting of data into table Facility.
5.2. REFERENTIAL INTEGRITY TESTING
Likewise, the DBMS will handle the referential integrity checking. To demonstrate, I have
attempted to insert an invalid gameNo foreign key. The result of inserting is unsuccessful as
shown in Figure 5.4. This is possible when the foreign key constraint is defined during
creating of tables.
Figure 5.4 Unsuccessful insert into table Facility using invalid foreign key.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
44 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
5.3. DATA DOMAIN TESTING
Data domain constraint checking can be done by the DBMS when the data type is defined in
the schema when creating the tables. For demonstration, I have attempted to insert a text
value on a decimal data domain. The outcome shown in Figure 5.5 demonstrates that the
inserting is unsuccessful.
Figure 5.5 Unsuccessful insert into table Facility using wrong data type.
5.4. CARDINALITY TESTING
In my ER diagram, it is optional for a Facility to be an Arcade. If a Facility is an Arcade, it must
have a Game. I have combined the Facility entity and Arcade entity into one table. Meaning
when inserting a Facility as an Arcade, it must provide the value for gameNo. Refer to the
schema for table Facility, value gameNo is an optional value as it can be NULL. Normal insert
query is not able to perform cardinality testing. Hence, I have used trigger,
before_facility_insert, to capture this constraint and manipulate it into a
referential integrity error to prevent the inserting. As MySQL does not support INSTEAD OF
functionality like MSSQL for trigger, I have used the following code manipulation in my
trigger for capturing this constraint which give an error shown in figure 5.6 when inserting.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
45 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
IF NEW.facilityType = 'arc' AND NEW.gameNo IS NULL THEN
SET NEW.gameNo = 'gameNo_not_defined';
END IF;
……
Figure 5.6 Unsuccessful insert with referential integrity error for cardinality checking.
On the other hand, Figure 5.2 demonstrates a successful insert query when insert a non
Arcade facility (LAN Station) with gameNo value as NULL.
5.5. SYSTEM OBJECTIVE CHECKLIST
This checklist is an overview of which triggers and stored procedures are used to fulfill the
system objective. There are a couple of common functions which are not listed as those
functions are called within the trigger or stored procedures. Please refer to the Appendix A:
SQL Schema for more information on the functions.
Inventory System
System Objective Trigger/Stored procedure Used
1. The system will be able to add new Store: AddFacility
facility records into the inventory. The Trigger: before_facility_insert
system will log this event. Trigger: after_facility_insert
Store: LogInventory
2. The system will be able to change where Store: InvChangeCenter
the facility is to be deployed. If facility is Trigger: before_facility_update
currently in a center, changing the Store: LogInventory
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
46 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
center will move the facility to the
inventory to be redeployed. The system
will log this event.
3. The system will be able to move facility Store: InvToInventory
records from centers that require Trigger: before_facility_update
maintenance servicing back to the Store: LogInventory
inventory. The system will log this event.
4. The system will be able to move facility Store: InvToCenter
record back to the center it should be Trigger: before_facility_update
deployed to when the maintenance Store: LogInventory
servicing is done. The system will log this
event.
Table 5.1 Codes that fulfill Inventory system objectives
Sales
System Objective Trigger/ Stored procedure Used
1. The system will be able to register one Store: AddPromotionToCenter
particular promotion to a center.
2. The system will be able to ensure that a Store: AddPromotionToCenter
center can only have one promotion at
any one time.
3. The system will be able to generate sales Store: AddSales
record on OR
Store: AddSalesArcadeCard
a. A normal basis when there is no
promotion and the customer is
not a member.
b. A membership basis if the
customer is a member.
c. A promotion basis if the center is
having a promotion.
4. The system will be able to ensure that Store: AddSales
the promotion privilege will not be OR
applicable if the sale is from a member. Store: AddSalesArcadeCard
Table 5.2 Codes that fulfill Sales system objective
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
47 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Member
System Objective Trigger/ Stored procedure Used
1. The system will be able to accumulate Trigger: after_sales_insert
the member points for any sales Store: AddPoints
generated by member where for every
S$1 spent, 10 points will be
accumulated.
2. The system will be able to ensure that Store: RedeemItem
the member has sufficient member Store: AddPoints
points for deduction before registering
any redemption made by the member.
3. The system will be able to reset the Store: MemberPointChecking
member points back to zero when the
member point expiry date has past. A
new member point expiry date will be
given by the system.
Table 5.3 Codes that fulfill member system objectives
5.6. SYSTEM OBJECTIVE TESTING
With the checklist in the previous section, I have conducted testing for each of the objectives
to demonstrate that the objectives are met. I have combined some of the objectives as they
are linked or is of similar functionality.
Inventory System, SI: Point 1
The system will be able to add new facility records into the inventory. The system will log
this event.
Statement for execution:
A. CALL AddFacility(‘lan’, 3, 2.5, NULL);
Result:
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
48 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
As shown in the screen captures below, the facility is successfully inserted and is in the
inventory. Logging of this event is also successfully. This demonstrates that the system
fulfills Point 1.
Figure 5.7a ‐ Successful executing of statement.
Figure 5.7b ‐ Facility1 is inserted.
Figure 5.7c ‐ Facility1 is in the inventory.
Figure 5.7d ‐ This event is logged.
Inventory System, SI: Point 2
The system will be able to change where the facility is to be deployed. If facility is currently
in a center, changing the center will move the facility to the inventory to be redeployed. The
system will log this event.
Statement for execution:
A. CALL InvChangeCenter (1,1);
B. CALL InvChangeCenter (2,2);
Result:
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
49 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Currently, there are 2 facilities. Facility1 is in inventory and Facility2 is in Center 1. Facility1
does not have any Center appointed to it.
Figure 5.8a ‐ Facility1 has not allocated a center and Facility2 is in a center.
Figure 5.8b ‐ Facility1 is in inventory with no center allocated yet.
Executing the statements demonstrated that the objective is met. Facility1 now is in
inventory and to be deployed to Center1. Facility2 is moved back to inventory and to be
deployed to Center 2 which is shown in the inventory log as well. This demonstrates that the
system fulfills Point 2.
Figure 5.8c ‐ Facility2 is sent back to inventory upon changing center.
Figure 5.8d ‐ Facility2 is in the inventory. Both facilities are allocated a center each.
Figure 5.8e ‐ This event is logged.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
50 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Inventory System, SI: Point 3 & Point 4
3) The system will be able to move facility records from centers that require maintenance
servicing back to the inventory. The system will log this event.
4) The system will be able to move facility record back to the center it should be deployed to
when the maintenance servicing is done. The system will log this event.
Statement for execution:
A. CALL InvToCenter(1);
Result:
I have used Point 4 to do the testing as both serve similar functionality. Currently both
facilities are in the inventory. Executing the statement shows that Facility1 is sent to
Center1 and this event is logged. This demonstrates that the system fulfills Point 4 as well as
Point 3.
Figure 5.9a ‐ Facility1 is in Center1 after executing the statement.
Figure 5.9b ‐ Facility1 is not in the inventory after executing the statement.
Figure 5.9c ‐ This event is logged.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
51 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Sales System, SA: Point 1 & Point 2
1) The system will be able to register one particular promotion to a center.
2) The system will be able to ensure that a center can only have one promotion at any one
time.
Statement for execution:
A. CALL AddPromotionToCenter(1, 7, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1
WEEK));
Result:
Executing the statement adds Promotion7 to Center1 for 1 week starting from the current
date as shown below. From the View centerpromoview, it shows that Center1 is currently
having Promotion7. This demonstrates that the system fulfills Point 1.
Figure 5.10a ‐ Center1 is having a promotion.
Executing the statement, adding other promotion to the current center causes an error
message stating that Center1 is currently having a promotion as shown below. The
attempted adding of the promotion is ignored. This demonstrates that the system fulfills
Point 2.
Figure 5.10b ‐ Center1 cannot have another promotion.
Sales System, SA: Point 3 & Point 4
3) The system will be able to generate sales record on
a) A normal basis when there is no promotion and the customer is not a member.
b) A promotion basis if the center is having a promotion.
c) A membership basis if the customer is a member.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
52 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
4) The system will be able to ensure that the promotion privilege will not be applicable if the
sale is from a member.
Statement for execution:
A. CALL AddSales(3, '11:00:00', '15:00:00', NULL);
B. CALL AddSales(1, '11:00:00', '15:00:00', NULL);
C. CALL AddSales(1, '11:00:00', '18:00:00', NULL);
D. CALL AddSales(1, '11:00:00', '15:00:00', 1);
E. CALL AddSales(1, '11:00:00', '18:00:00', 1);
Result:
Currently, Center1 is having Promotion7 which states that any LAN station usage of $15 and
more will have a 10% deduction. Executing Statement (A) generates sales record for
Facility3, a Billiard Table. 4 hours of billiard at $7 per hours cost $28 and the center is having
promotion for LAN station. This demonstrate the system fulfill the objective of Point 3(a).
Figure 5.11a ‐ Sales record generated from executing Statement (A).
Executing Statement (B) generates sales record for Facility1, a LAN station. 4 hours of LAN at
$3 per hours cost $12 but it is not given a 10% discount as the sales did not have a minimum
expenditure of $15. Executing Statement (C) shows a 10% discount otherwise for a 7hours
LAN. This demonstrate the system fulfill the objective of Point 3(b).
Figure 5.11b ‐ New sales record generated from executing Statement (B) & (C).
Executing Statement (D) generates sales record for Facility1, a LAN station. 4 hours of LAN at
$2.50 per hours cost $10 for member. This demonstrate the system fulfill the objective of
Point 3(c).
Executing Statement (E) generates sales record for Facility1, a LAN station. 7 hours of LAN at
$2.50 per hours cost $17.50 for member. Even though the center is having promotion for
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
53 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
LAN, the promotion privilege is not applicable for a sales record from a member. This
demonstrate the system fulfill the objective of Point 4.
Figure 5.11c ‐ New sales record generated from executing Statement (D) & (E).
Member System, ME: Point 1
The system will be able to accumulate the member points for any sales generated by
member where for every S$0.10 spent, 1 point will be accumulated.
Statement for execution:
A. CALL AddSales(3, '11:00:00', '15:00:00', 1);
Result:
As shown in the screen capture below, Member1 currently has 2275 points.
Figure 5.12a ‐ Member1 currently has 2275 points.
Executing Statement (A) will generate a sales record of $24.80 for Member1. Hence, a total
of 248 points is added to Member1’s points. Before, Member1 has total points of 2275
adding 248 from the Billiard usage to give 2523. This demonstrate the system fulfill the
objective of Point 1.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
54 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Figure 5.12b ‐ Generate a sales record of $24.80 for Member1.
Figure 5.12c ‐ Member1 now has 2523 points after paying for the Billiard usage.
Member System, ME: Point 2
The system will be able to ensure that the member has sufficient member points for
deduction before registering any redemption made by the member.
Statement for execution:
A. CALL RedeemItem(1,14);
B. CALL RedeemItem(1,15);
Result:
As shown in the screen capture below, Item14 cost 1000 points and Item15 cost 5000
points.
Figure 5.13a ‐ Points cost for Item14 and Item15
In Figure 5.12c shows that Member1 currently has 2523 points. After executing Statement
(A), 1000 points is deducted from Member1 and the redemption is registered.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
55 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Figure 5.13b ‐ Member1 now has 1523 after redeeming Item14.
Figure 5.13c ‐ The redemption is recorded.
Next, executing Statement (B) shows that Member1 does not have enough points to redeem
Item15 and the redemption is ignored. This demonstrate the system fulfill the objective of
Point 2.
Figure 5.13d ‐ Member1 does not have enough points to redeem Item15.
Member System, ME: Point 3
The system will be able to reset the member points back to zero when the member point
expiry date has past. A new member point expiry date will be extended by 1 year.
Statement for execution:
A. CALL MemberPointChecking();
Result:
Member3’s points expiry date is expired. After executing Statement (A), Member3 points is
reset to 0 and the points expiry date is extended by 1 year. This demonstrate the system
fulfill the objective of Point 3.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
56 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Figure 5.14a ‐ Member3 points and expiry date before executing Statement (A).
Figure 5.14b ‐ Member3 points and expiry date after executing Statement (A).
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
57 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
6. CONCLUSION
6.1. CRITICAL REVIEW & REFLECTIONS
Creating Functions based on Views
While I was creating the functions for my system, I realized that if I need to make any
changes to the table structure, I will need to tediously modify all the functions which are
based on that table e.g. table name. Moreover, in some logic, I need to call 2 functions in
order to get the data. For example, a center can have promotion. Hence, to get the
promotion data of that center, I will to use the center number to calls a function to obtain
the promotion number, with it calls another function to obtain data relating to that
promotion.
I was thinking aloud, hey this is rather not efficient. How can I make the coding friendlier in
the long run? That is when Views come into my mind.
I have recoded my functions to query from the Views. When there are any changes to the
individual table structure used to create that View, I just need to modify the View instead of
all the functions rely on that table. Modifying one time than many, it really makes code
modification easier. By making complex query into View, I can do simply SELECT query on
the View to obtain the data I want. From the example mentioned earlier, I have created
View centerpromoview which left join center and promotion data. Hence with the
center number, I can call one function to obtain promotion data if the center has one. Refer
to the View centerpromoview in Appendix A: SQL Schema.
Project Management Vs. Time Management
Even though I have taken up Project Management course in UniSIM, I still need tremendous
practice and hands on to be good in it. Single project management is still manageable for
me. However, I am in a situation where I need to manage multiple projects other than my
academic project. At time when time is a constraint, I need to prioritize and jeopardize the
time allocated for my academic project. I still need to improve on my planning and time
management to better control my situation. How I can improve on this is to learn and
practice risk management.
Conducting Interviews
Before going for the interview with the business manager of Valibel Technologies Pte Ltd for
requirement gathering, I have planned some interview questions to be asked. I thought I am
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
58 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
well prepared with the list of questions and I can ask systematically. However, I was wrong.
Even though I had the questions orderly listed to be asked, the tendency of hopping
between questions is still high. This is due to interviewee sometime talks about information
related to another question instead of the one being asked. Then I got out of hand with the
questions I want to ask. I should have made the questions into a checklist which is better to
manage. How I can improve is the make a template for interview questions, and improves on
it as I conduct more requirement gathering. With the template, it can be more efficiency in
future interviews.
Using MySQL as the DBMS
I have chosen MySQL over other DBMS is because I am some prior knowledge in MySQL then
other DBMS. Learning to create triggers and stored procedure in MySQL will be an asset to
me. However, doing this project in MySQL gave me an insight of the limitation of this DBMS.
For the DBMS to have referential integrity, I have to use InnoDB storage engine. Some
limitation is that MySQL does not support CHECK constraints on domain data and the trigger
does not support INSTEAD OF functionality like MSSQL. As MySQL is an open source
database and is very widely used, users will want improvements and all this common
functionality among the different databases might be in the MySQL development pipeline.
Nevertheless, it is better to measure the scope and objectives of the system and to evaluate
before deciding on which DBMS to use for the project.
Database coding and syntax
Though I love programming, but I have never really gone in depth for database
programming. For my practice, I usually would program a web application to interact with
the database, and the database is just mainly for querying (SELECT, UPDATE and DELETE).
Most of the checking will be done by the web server before interacting with the database to
execute the query. From this project, I have learnt much on database programming using
trigger and stored procedure which will be an asset to me when I take on future web
application projects.
Writing a good report
English language is one of my worst subjects. Hence when doing this report, I do not have
the confidence to produce a good report. Even though, I have read up on materials on how
to write a good report, language flow and structure still play a major part in the reporting.
What is the point of doing the report if the reader gets the wrong meaning? This is one area
I am weak in and need great practices to improve.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
59 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
6.2. RECOMMENDATIONS
Before the birth of this project idea, I am thinking of a general database system which can
accommodate any general chain stores. The system will be able to give trend analysis.
However, this project is focus on database design, creating triggers and stored procedures.
Showing trend analysis becomes rather inapplicable for this project as trend analysis
requires complex join of normal querying. Trend analysis module with GUI can be an add‐on
project to this database system.
Other areas which this project can look into include the security issue of using MySQL and
deployment of the database system in a distributed environment.
6.3. CONCLUSION
The database system I have done for this project has met its system objectives. All this is
possible with triggers and stored procedures call to check on the constraints of the system
objectives. It is a challenge to me as this project is purely on database scripting which I am
not good in it and the ICT315 course which I took is a very general introduction into
database which did not really go in depth on triggers and stored procedures. Although I am
familiar with web server scripting like PHP, I cannot use it for this project. Nevertheless, it is
a good experience to explore into database scripting.
In my report, section 1.6 Methodology Adopted, I shared how I did my project. In my general
view, what was planned before effects what I was doing later. If there does not have a
development lifecycle to serve me as a guideline, I would have been in a mess, not knowing
where to carry on. A good planning definitely leads to better and efficient work.
From this project, I have developed a learning process for myself. For area where I am new
or need improvement on, I will need to conduct research on the related area, understand
the information I am researching on, practices with hands on, evaluate what I have hands on
and done, then research on area I am weak in or unsure of. So this learning process iterates
at every stage in the development lifecycle, and I should improve on the process with other
small sub processes that I have learnt. In this way or another way, putting what I have learnt
into practice is the best way to strengthen my areas.
(About 7500 words for content without include the header, caption, figures and tables.)
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
60 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
7. APPENDICES
7.1. APPENDIX A: SQL SCHEMA
CREATE TABLE SCHEMA
Table: game
DROP TABLE IF EXISTS `game`;
CREATE TABLE `game` (
`gameNo` int(10) unsigned NOT NULL auto_increment,
`gameTitle` text NOT NULL,
`genre` text NOT NULL,
PRIMARY KEY (`gameNo`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: center
DROP TABLE IF EXISTS `center`;
CREATE TABLE `center` (
`centerNo` int(10) unsigned NOT NULL auto_increment,
`name` text NOT NULL,
PRIMARY KEY (`centerNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: promotion
DROP TABLE IF EXISTS `promotion`;
CREATE TABLE `promotion` (
`promotionNo` int(10) unsigned NOT NULL auto_increment,
`description` text NOT NULL,
`ratetype` enum('amt','per') NOT NULL,
`rate` int(3) unsigned NOT NULL,
`minspent` int(2) NOT NULL default '0',
`promoType` enum('lan','bill','arc','all') NOT NULL,
PRIMARY KEY (`promotionNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: member
DROP TABLE IF EXISTS `member`;
CREATE TABLE `member` (
`memberNo` int(10) unsigned NOT NULL auto_increment,
`name` text NOT NULL,
`identityNo` text NOT NULL,
`gender` enum('M','F') NOT NULL,
`dob` date NOT NULL,
`address` text NOT NULL,
`email` text NOT NULL,
`contact` int(10) unsigned NOT NULL,
`occupation` text NOT NULL,
`memberCardNo` int(10) unsigned NOT NULL,
`joinedDate` date NOT NULL,
`points` int(10) unsigned NOT NULL,
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
61 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Table: arcadecard
DROP TABLE IF EXISTS `arcadecard`;
CREATE TABLE `arcadecard` (
`arcadeCardNo` int(10) unsigned NOT NULL auto_increment,
`normalCardPrice` decimal(5,2) NOT NULL,
`memberCardPrice` decimal(5,2) NOT NULL,
`cardValue` decimal(5,2) NOT NULL,
PRIMARY KEY (`arcadeCardNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: redeemitem
DROP TABLE IF EXISTS `redeemitem`;
CREATE TABLE `redeemitem` (
`redeemItemNo` int(10) unsigned NOT NULL auto_increment,
`redeemDesc` text NOT NULL,
`pointsCost` int(10) unsigned NOT NULL,
PRIMARY KEY (`redeemItemNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: facility
DROP TABLE IF EXISTS `facility`;
CREATE TABLE `facility` (
`facilityNo` int(10) unsigned NOT NULL auto_increment,
`centerNo` int(10) unsigned default NULL,
`facilityType` enum('lan','bill','arc') NOT NULL,
`facilityStatus` enum('0','1') NOT NULL default '0',
`normalPrice` decimal(5,2) NOT NULL default '0.00',
`MemberPrice` decimal(5,2) default '0.00',
`gameNo` int(10) unsigned default NULL,
PRIMARY KEY (`facilityNo`),
KEY `Facility_Index1` USING BTREE (`centerNo`),
KEY `Facility_Index2` USING BTREE(`gameNo`),
CONSTRAINT `FK_facility_1` FOREIGN KEY (`centerNo`)
REFERENCES `center` (`centerNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT `FK_facility_2` FOREIGN KEY (`gameNo`)
REFERENCES `game` (`gameNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: inventory
DROP TABLE IF EXISTS `inventory`;
CREATE TABLE `inventory` (
`facilityNo` int(10) unsigned NOT NULL,
`toDeployAt` int(10) unsigned default NULL,
PRIMARY KEY (`facilityNo`),
KEY `Inventory_Index1` USING BTREE (`facilityNo`),
CONSTRAINT `FK_inventory_1` FOREIGN KEY (`facilityNo`)
REFERENCES `facility` (`facilityNo`)
ON DELETE CASCADE
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
62 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: inventorylog
DROP TABLE IF EXISTS `inventorylog`;
CREATE TABLE `inventorylog` (
`facilityNo` int(10) unsigned NOT NULL,
`invLogDatetime` datetime NOT NULL,
`invDescription` text NOT NULL,
PRIMARY KEY (`facilityNo`,`invLogDatetime`),
KEY `InventoryLog_Index1` USING BTREE (`facilityNo`),
CONSTRAINT `FK_inventorylog_1` FOREIGN KEY (`facilityNo`)
REFERENCES `facility` (`facilityNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: centerpromotion
DROP TABLE IF EXISTS `centerpromotion`;
CREATE TABLE `centerpromotion` (
`centerNo` int(10) unsigned NOT NULL,
`promotionNo` int(10) unsigned NOT NULL,
`startDate` datetime NOT NULL,
`endDate` datetime NOT NULL,
PRIMARY KEY (`centerNo`,`promotionNo`,`startDate`,`endDate`),
KEY `CenterPromotion_Index1` USING BTREE (`centerNo`),
KEY `CenterPromotion_Index2` USING BTREE (`promotionNo`),
CONSTRAINT `FK_centerpromotion_1` FOREIGN KEY (`centerNo`)
REFERENCES `center` (`centerNo`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `FK_centerpromotion_2` FOREIGN KEY (`promotionNo`)
REFERENCES `promotion` (`promotionNo`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table: sales
DROP TABLE IF EXISTS `sales`;
CREATE TABLE `sales` (
`salesNo` int(10) unsigned NOT NULL auto_increment,
`salesType` enum('lan','bill','arc') NOT NULL,
`salesDatetime` datetime NOT NULL,
`amtPayable` decimal(10,2) NOT NULL,
`memberNo` int(10) unsigned default NULL,
`startTime` time NULL,
`endTime` time NULL,
`facilityNo` int(10) unsigned default NULL,
`arcadeCardNo` int(10) unsigned NULL,
`centerNo` int(10) unsigned default NULL,
PRIMARY KEY (`salesNo`),
KEY `Sales_Index1` USING BTREE (`memberNo`),
KEY `Sales_Index2` USING BTREE (`facilityNo`),
KEY `Sales_Index3` USING BTREE (`arcadeCardNo`),
KEY `Sales_Index4` USING BTREE (`centerNo`),
CONSTRAINT `FK_sales_1` FOREIGN KEY (`memberNo`)
REFERENCES `member` (`memberNo`)
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
63 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Table: redemption
DROP TABLE IF EXISTS `redemption`;
CREATE TABLE `redemption` (
`redeemDatetime` datetime NOT NULL,
`redeemItemNo` int(10) unsigned NOT NULL,
`memberNo` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`redeemDatetime`,`redeemItemNo`,`memberNo`),
KEY `Redemption_Index1` USING BTREE (`redeemItemNo`),
KEY `Redemption_Index2` USING BTREE (`memberNo`),
CONSTRAINT `FK_redemption_1` FOREIGN KEY (`memberNo`)
REFERENCES `member` (`memberNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT `FK_redemption_2` FOREIGN KEY (`redeemItemNo`)
REFERENCES `redeemitem` (`redeemItemNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE VIEWS SCHEMA
View: centerpromoview
DELIMITER //
DROP VIEW IF EXISTS `centerpromoview` //
#Showing the centers which has or does not has a promotion and the
details on the current promotion. Only the current promotion for each
center is retrieved.
CREATE VIEW `centerpromoview` AS
SELECT
centerNo AS centerNo,
promotionNo AS promotionNo,
name AS centerName,
startDate AS promoStartDate,
endDate AS promoEndDate,
description AS promoDesc,
rateType AS promoRateType,
rate AS promoRate,
minspent AS promoMinSpent,
promoType as promoType
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
64 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
View: facilitycenterpromoview
DELIMITER //
DROP VIEW IF EXISTS `facilitycenterpromoview` //
#Showing the facility which has or does not has a promotion and the
details on the current promotion and the center which the facility is
in. Only the current promotion for each center is retrieved.
CREATE VIEW `facilitycenterpromoview` AS
SELECT
facilityNo AS facilityNo,
centerNo AS centerNo,
promotionNo AS promotionNo,
facilityType AS facilityType,
normalPrice AS normalPrice,
memberPrice AS memberPrice,
gameTitle AS arcadeGameTitle,
genre AS arcadeGenre,
name AS centerName,
startDate AS promoStartDate,
endDate AS promoEndDate,
description AS promoDesc,
rateType AS promoRateType,
rate AS promoRate,
minspent AS promoMinSpent,
promoType as promoType
FROM facility LEFT JOIN center USING (centerNo) LEFT JOIN
centerpromotion USING (centerNo) LEFT JOIN promotion USING
(promotionNo) LEFT JOIN game USING (gameNo) WHERE endDate >=
CURDATE() OR endDate IS NULL;
//
DELIMITER ;
CREATE TRIGGER SCHEMA
Trigger: before_facility_insert
DELIMITER //
DROP TRIGGER IF EXISTS `before_facility_insert` //
CREATE TRIGGER `before_facility_insert` BEFORE INSERT ON facility
FOR EACH ROW
BEGIN
SET @center = NEW.centerNo;
SET NEW.centerNo = NULL;
IF NEW.facilityStatus <> 0 THEN
SET NEW.facilityStatus = '0';
END IF;
IF NEW.facilityType <> 'arc' THEN
SET NEW.gameNo = NULL;
END IF;
IF NEW.facilityType = 'arc' AND NEW.gameNo IS NULL THEN
SET NEW.gameNo = 'gameNo_not_defined';
END IF;
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
65 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
END
//
DELIMITER;
Trigger: after_facility_insert
DELIMITER //
DROP TRIGGER IF EXISTS `after_facility_insert` //
CREATE TRIGGER `after_facility_insert` AFTER INSERT ON facility
FOR EACH ROW
BEGIN
SET @newFacility = NEW.facilityNo;
INSERT INTO inventory (facilityNo, toDeployAt)
VALUES (@newFacility,@center);
CALL LogInventory(@newFacility,@center,1);
END
//
DELIMITER;
Trigger: before_facility_update
DELIMITER //
DROP TRIGGER IF EXISTS `before_facility_update` //
CREATE TRIGGER `before_facility_update` BEFORE UPDATE ON facility
FOR EACH ROW
BEGIN
SET @facilityStatus = NEW.facilityStatus;
SET @facilityStatusOld = OLD.facilityStatus;
SET @facilityNo = NEW.facilityNo;
SET @centerNo = NEW.centerNo;
SET @centerNoOld = OLD.centerNo;
IF @facilityStatus = 0 THEN
INSERT INTO inventory (facilityNo, toDeployAt)
VALUES (@facilityNo, @centerNo);
CALL LogInventory(@FacilityNo,@centerNo,2);
SET NEW.centerNo = NULL;
END IF;
Trigger: after_sales_insert
DELIMITER //
DROP TRIGGER IF EXISTS `after_sales_insert` //
CREATE TRIGGER `after_sales_insert` AFTER INSERT ON sales
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
66 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
CREATE STORED PROCEDURE SCHEMA
Stored procedure: AddFacility
DELIMITER //
DROP PROCEDURE IF EXISTS `AddFacility` //
CREATE PROCEDURE `AddFacility`
(
facilityType CHAR(4),
normalPrice DECIMAL(5,2),
memberPrice DECIMAL(5,2),
gameNo INTEGER
)
BEGIN
IF facilityType NOT IN ('lan','bill','arc') THEN
SELECT 'Facility Type is invalid. Use \'lan\', \'bill\' or \'arc\''
AS Error;
ELSEIF facilityType = 'arc' AND gameNo IS NULL THEN
SELECT 'Please provide game number for the arcade facility.' AS
Error;
ELSE
INSERT INTO `facility` (
`facilityType`,
`normalPrice`,
`MemberPrice`,
`gameNo`
)
VALUES (facilityType, normalPrice, memberPrice, gameNo);
END IF;
END//
DELIMITER ;
Stored procedure: InvToInventory
DELIMITER //
DROP PROCEDURE IF EXISTS `InvToInventory` //
CREATE PROCEDURE `InvToInventory`
(
facNo INTEGER
)
BEGIN
SET @facilityNo = facNo;
If getFacilityCenter(@facilityNo) IS NOT NULL THEN
UPDATE facility SET facilityStatus = '0' WHERE facilityNo =
@facilityNo;
ELSE
SELECT 'Facility is already in inventory.' AS Error;
END IF;
END//
DELIMITER ;
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
67 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Stored procedure: InvToCenter
DELIMITER //
DROP PROCEDURE IF EXISTS `InvToCenter` //
CREATE PROCEDURE `InvToCenter`
(
facNo INTEGER
)
proc:BEGIN
SET @facilityNo = facNo;
IF getDeployAt(@facilityNo) IS NULL THEN
SELECT 'Facility has not set which center to deploy to.' AS Error;
LEAVE proc;
END IF;
If getFacilityCenter(@facilityNo) IS NULL THEN
UPDATE facility SET facilityStatus = '1' WHERE facilityNo =
@facilityNo;
ELSE
SELECT 'Facility is already in a center.' AS Error;
END IF;
END proc;
//
DELIMITER ;
Stored procedure: InvChangeCenter
DELIMITER //
DROP PROCEDURE IF EXISTS `InvChangeCenter` //
CREATE PROCEDURE `InvChangeCenter`
(
facNo INTEGER,
cenNo INTEGER
)
BEGIN
SET @facilityNo = facNo;
SET @changeCenter = cenNo;
If getFacilityCenter(@facilityNo) IS NULL THEN
UPDATE inventory SET toDeployAt = @changeCenter WHERE facilityNo =
@facilityNo;
ELSE
UPDATE facility SET centerNo = @changeCenter WHERE facilityNo =
@facilityNo;
END IF;
END//
DELIMITER ;
Stored procedure: LogInventory
DELIMITER //
DROP PROCEDURE IF EXISTS `LogInventory` //
CREATE PROCEDURE `LogInventory`
(
facilityNo INTEGER,
centerNo INTEGER,
logType INTEGER
)
BEGIN
DECLARE description TEXT;
IF logType != '' THEN
SET @facilityType = (SELECT getFacilityName(facilityNo));
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
68 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Stored procedure: AddPoints
DELIMITER //
DROP PROCEDURE IF EXISTS `AddPoints` //
CREATE PROCEDURE `AddPoints`
(
memNo INTEGER,
pts INTEGER
)
proc:BEGIN
SET @memberNo = memNo;
SET @points = pts;
UPDATE member SET points = points + @points WHERE memberNo =
@memberNo;
END proc;
//
DELIMITER ;
Stored procedure: RedeemItem
DELIMITER //
DROP PROCEDURE IF EXISTS `RedeemItem` //
CREATE PROCEDURE `RedeemItem`
(
memNo INTEGER,
reItem INTEGER
)
proc:BEGIN
SET @memberNo = memNo;
SET @redeemItemNo = reItem;
#Get the points to redeem the redeem item and check if redeem item is
exist.
SET @pointsRedeemed = (SELECT getRedeemItemPoints(@redeemItemNo));
IF @pointsRedeemed IS NULL THEN
SELECT 'Procedure call ends. Redeem Item does not exist. ' AS
Error;
LEAVE proc;
END IF;
#Get the points of the member and check if member is exist.
SET @pointsLeft = (SELECT getMemberPoints(@memberNo));
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
69 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Stored procedure: MemberPointChecking
DELIMITER //
DROP PROCEDURE IF EXISTS `MemberPointChecking` //
CREATE PROCEDURE `MemberPointChecking`
(
)
proc:BEGIN
UPDATE member SET points = 0, pointsExpiry =
DATE_ADD(pointsExpiry,INTERVAL 1 YEAR) WHERE pointsExpiry <=
CURDATE();
END proc;
//
DELIMITER ;
Stored procedure: AddSales
DELIMITER //
DROP PROCEDURE IF EXISTS `AddSales` //
CREATE PROCEDURE `AddSales`
(
facNo INTEGER,
startTime TIME,
endTime TIME,
memNo INTEGER
)
proc:BEGIN
SET @price = 0.0;
SET @facilityNo = facNo;
#Check IF member number is valid. IF not valid, leave procedure. Only
NULL or valid member number is accepted.
IF memNo IS NOT NULL THEN
IF isMember(memNo) IS NOT NULL THEN
SET @memberNo = memNo;
SET @Price = getMemberPrice(@facilityNo);
ELSE
SELECT 'Procedure call ends. Member does not exist. ' AS Error;
LEAVE proc;
END IF;
ELSE
SET @memberNo = NULL;
SET @price = getNormalPrice(@facilityNo);
END IF;
SET @centerNo = getFacilityCenter(@facilityNo);
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
70 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Stored procedure: AddSalesArcadeCard
DELIMITER //
DROP PROCEDURE IF EXISTS `AddSalesArcadeCard` //
CREATE PROCEDURE `AddSalesArcadeCard`
(
cenNo INTEGER,
arCardNo INTEGER,
memNo INTEGER
)
proc:BEGIN
SET @price = 0.0;
SET @centerNo = cenNo;
SET @arcadeCardNo = arCardNo;
IF isCenterExist(@centerNo) IS NOT NULL THEN
#Check IF member number is valid. IF not valid, leave procedure.
Only NULL or valid member number is accepted.
IF memNo IS NOT NULL THEN
IF isMember(memNo) IS NOT NULL THEN
SET @memberNo = memNo;
SET @Price = getMemberPriceArcadeCard(@arcadeCardNo);
ELSE
SELECT 'Procedure call ends. Member does not exist. ' AS Error;
LEAVE proc;
END IF;
ELSE
SET @memberNo = NULL;
SET @price = getNormalPriceArcadeCard(@arcadeCardNo);
SET @promoType = getPromotionType(@centerNo);
SET @minspent = getPromotionMinimumSpent(@centerNo);
IF (@promoType = 'arc' OR @promoType = 'all') AND @price >=
@minspent THEN
SET @rateType = getPromotionRateType(@centerNo);
SET @rate = getPromotionRate(@centerNo);
IF @rateType = 'per' THEN
SET @price = @price - (@price*@rate/100);
ELSE
SET @price = @price - @rate;
END IF;
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
71 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
END IF;
END IF;
INSERT INTO sales VALUES
(NULL,'arc',NOW(),@price,@memberNo,NULL,NULL,NULL,@arcadeCardNo,@cent
erNo);
ELSE
SELECT 'Arcade Center does not exist.' AS Error;
END IF;
END proc;
//
DELIMITER ;
Stored procedure: AddPromotionToCenter
DELIMITER //
DROP PROCEDURE IF EXISTS `AddPromotionToCenter` //
CREATE PROCEDURE `AddPromotionToCenter`
(
cenNo INTEGER,
promoNo INTEGER,
startDate DATE,
endDate DATE
)
proc:BEGIN
SET @centerNo = cenNo;
SET @promotionNo = promoNo;
7.2. APPENDIX B: SQL TABLE POPULATION
DEFAULT DATA POPULATION
Default Data Population: arcadecard
INSERT INTO arcadecard (arcadeCardNo, normalCardPrice,
memberCardPrice, cardValue) VALUES
(1, 2, 2, 2),
(2, 5, 4, 5),
(3, 10, 8, 10),
(4, 15, 10, 15),
(5, 25, 18, 25),
(6, 50, 30, 50);
Default Data Population: center
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
72 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Default Data Population: game
INSERT INTO game (gameNo, gameTitle, genre) VALUES
(1, 'Time Crisis 2', 'Shooting'),
(2, 'Time Crisis 3', 'Shooting'),
(3, 'Time Crisis 4', 'Shooting'),
(4, 'House Of The Dead 3', 'Shooting'),
(5, 'House Of The Dead 4', 'Shooting'),
(6, 'Initial D 3', 'Racing'),
(7, 'Initial D 4', 'Racing'),
(8, 'Midnight Tune 3', 'Racing'),
(9, 'Pinball Fire', 'Pinball Machine '),
(10, 'Raw Thrills', 'Racing'),
(11, 'Stacker', 'Prize Merchandiser'),
(12, 'Grab A Doll', 'Claw & Skill Crane Machine'),
(13, 'Lollipop Lucky', 'Claw & Skill Crane Machine'),
(14, 'The Three Kingdoms', 'Platform'),
(15, 'Football Championship', 'Sports');
Default Data Population: member
INSERT INTO member (memberNo, name, identityNo, gender, dob, address,
email, contact, occupation, memberCardNo, joinedDate, points,
pointsExpiry) VALUES
(1, 'Andrew Wee Kim Soo', 'S8020938A', 'M', '1980-05-24', '218
Orchard Road (S)238851', 'andrewee80@hotmail.com', 92373629,
'Banker', 928349495, '2002-01-11', 2000, '2010-08-31'),
(2, 'Lim Jingyin', 'S8406273B', 'F', '1984-07-02', '795 Ang Mo Kio
Avenue 1 (S)569976', 'ljy88@hotmail.com', 86738293, 'Student',
983920311, '2008-02-15', 2000, '2010-02-15'),
(3, 'Gan Kee Sim', 'S8588432J', 'M', '1985-03-07', '248 Choa Chu Kang
Avenue 2 (S)680248', 'keesim99@yahoo.com', 81239123, 'Student',
928347771, '2007-07-31', 2000, '2008-07-31'),
(4, 'Betty Su Kim Ling', 'S8947384C', 'F', '1989-09-22', '720
Woodlands Avenue 6 (S)730720', 'susubetty@yahoo.com.sg', 97382937,
'Student', 912348372, '2007-12-23', 2000, '2008-12-23'),
(5, 'Gary Tan Seng', 'S8321138D', 'M', '1983-06-21', '55 Chua Chun
Kang Road (S)345643', 'garygary55@hotmail.com', 94532349, 'Student',
912381239, '2007-01-11', 2000, '2009-08-15');
Default Data Population: promotion
INSERT INTO promotion (promotionNo, description, ratetype, rate,
minspent, promoType) VALUES
(1, '5% off for LAN usage', 'per', 5, 0, 'lan'),
(2, '5% off for billiard usage', 'per', 5, 0, 'bill'),
(3, '5% off for purchase of arcade card', 'per', 5, 0, 'arc'),
(4, '5% off spending at this center', 'per', 5, 0, 'all'),
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
73 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
(5, '$2 off LAN usage with a minimum spending of $10', 'amt', 2, 10,
'lan'),
(6, '$2 off billiard usage with a minimum spending of $10', 'amt', 2,
10, 'bill'),
(7, '10% off LAN usage with minimum spending of $15', 'per', 10, 15,
'lan'),
(8, '10% off billiard usage with minimum spending of $15', 'per', 10,
15, 'bill'),
(9, '$1 off with $5 and above arcade card purchased', 'amt', 1, 5,
'arc'),
(10, '$3 off with $10 and above arcade card purchased', 'amt', 3, 10,
'arc'),
(11, '$10 off with $25 and above arcade card purchased', 'amt', 10,
25, 'arc');
Default Data Population: redeemitem
INSERT INTO redeemitem (redeemItemNo, redeemDesc, pointsCost) VALUES
(1, 'Beautiful Sticker', 50),
(2, 'Pencil Box', 150),
(3, 'Candy Sweets', 150),
(4, 'Small Teddy Bear', 150),
(5, 'Medium Teddy Bear', 250),
(6, 'Big Teddy Bear', 450),
(7, 'Gaint Teddy Bear', 1500),
(8, 'Stylish Watch', 200),
(9, 'Baseball Cap', 120),
(10, 'Funland T-shirt', 220),
(11, 'Handheld Game', 350),
(12, 'Cool Sunglasses', 300),
(13, 'Can Drink', 80),
(14, 'Mobile Phone', 1000),
(15, '32" LCD TV', 5000),
(16, 'Mini Home Threatre System', 2000),
(17, 'MP3 Player 1GB', 500),
(18, 'MP3 Player 2GB', 1100),
(19, 'MP3 Player 4GB', 2500),
(20, 'Thumb Drive 2GB', 900),
(21, 'Basketball', 350),
(22, 'Soccerball', 350);
*Other data can be populate by calling the Stored Procedures.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
74 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
7.3. APPENDIX C: GANTT CHART
Starting of the Project till the submission of initial report
Second part of the Project from requirement gathering till the submission of this Final
Report.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
75 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Schedule Meeting with Tutor
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
76 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
7.4. APPENDIX D: OTHERS
Interview form
User Requirements Interview Questions
Project Title: Sales and Inventory System for Chain Stores (Amusement Center)
1) Company background.
a. How many centers?
b. How does each center operate in general?
2) Company’s operation workflow
a. Is company using any system?
b. What is the company sales operation?
c. What is the company logistic operation?
d. Any repeating tasks?
e. Any exceptional cases?
3) Information that is of importance to the user. (Content Identification)
a. What are the data that need to be store?
b. What information user currently uses?
c. Any forms?
d. How is the data currently stored?
4) Open questions.
a. What are the problems the user encounter?
b. What concerns the user has on the current system?
c. What the user wants the system to be capable of?
d. What are the expectations?
5) User to prioritize the information importance. (Prioritization)
a. What user wants to do with the information?
b. How user wants to see the information?
6) Defining the major user requirements if any.
7) Anything the user wants to point out?
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
77 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Membership Form
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
78 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
Sales Tracking Form
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
79 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
8. REFERENCES
Publishing. 0764574906
[ 3 ] Lans, Rick F. van der. (c2007) SQL for MySQL Developers: A Comprehensive
http://pubs.logicalexpressions.com/pub0009/LPMArticle.asp?ID=343 [viewed
14/02/2008]
http://www.projectsmart.co.uk/6-steps-to-successful-schedules.html [viewed
13/02/2008]
[ 6 ] Christina, Low and Daphne, Pan (2007) The Write Right Guide.
[ 9 ] Kruckenberg, Michael. and Pipes, Jay. (c2005) Pro MySQL. Berkeley, CA : New
[ 10 ] MySQL AB, 2008 Sun Microsystems, Inc., MySQL 5.0 Reference Manual.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
80 of 81
LEE CHANGJIN (K0604033) JAN08/BHICT/03
9. GLOSSARY
SDLC Systems Development Life Cycle relates to models or methodologies that
people use to develop systems
DBMS A DataBase Management System is computer software designed for the
purpose of managing databases based on a variety of data models.
GUI A Graphical User Interface is a type of user interface which allows people to
interact with electronic devices such as computers. It offers graphical icons,
and visual indicators as opposed to text‐based interfaces, typed command
labels or text navigation to fully represent the information and actions
available to a user.
WBS Work Breakdown Structure is a tree structure listing of tasks commonly used
in project management.
E‐A‐R Model Entity – Attribute – Relationship Model used in database design.
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008
81 of 81