Bus Company Data Management System

CS353: Database Systems Course Project

Design Report

18 Apr 2014

Revised E/R Model

E/R Model

Relation Schemas

Summary

staff(tckno, name, salary, phone, homeaddress, start_date)

systemuser(tckno, password)
FK: tck
no references staff

manager(tckno, position)
FK: tck
no references systemuser

salesperson(tckno, officecity, officeaddress)
FK: tck
no references systemuser
FK: (officecity, officeaddress) references sales_office(city, address)

terminalagent(tckno, terminalcity, terminaladdress)
FK: tckno references systemuser
FK: (terminal
city, terminal_address) references terminal(city,address)

sales_office(city, address, telephone)

driver(tckno, licenseno)
FK: tck_no references staff

rent(plate, starttime, endtime, price, rented_from)
FK: plate references bus

renteddriver(tckno, plate, starttime)
FK: tck
no references driver
FK: (plate, start_time) references rent

assistant(tckno, rank)
FK: tck
no references staff

rentedassistant(plate, starttime, tckno)
FK: tck
no references assistant
FK: (plate, start_time) references rent

customer(tck_no, name, surname, dateofbirth, gender)

rentedby(tckno, plate, starttime)
FK: tck
no references customer
FK: (plate,start_time) references rent

garage(city, address, telephone, capacity)

is_at(city, address, plate)
FK: (city, address) references garage
FK: plate references bus

bustype(brand, model, year, layout, storagecapacity, passangercapacity, height, width, length)

bustypefeature(brand, model, year, featurename)
FK: (brand, model, year) references bustype

terminal(city, address, telephone, capacity)

bus(plate, brand, model, year, roamingdistance, startdate, is_operational)
FK: (brand, model, year) references bustype

route(id, departcity, departaddress, arrivecity, arriveaddress, estimatedduration, distance, numberofbreaks)
FK: (depart
city, departaddress) references terminal(city, address)
FK: (arrive
city, arrive_address) references terminal(city, address)

stopover(city, address, routeid)
FK: route
id references route(id)
FK: (city, address) references terminal

servicearea(address, start_year)

break(routeid, address, duration)
FK: route
id references route(id)
FK: address references servicearea

voyage(plate, routeid, departuretime, arrivaltime, price, occupiedseats)
FK: plate references bus
FK: route_id references route(id)

reservation(tckno, plate, routeid, departuretime, seat, time, price)
FK: tck
no references customer
FK: (plate,routeid, departuretime) references voyage

associateddriver(tckno, plate, routeid, departuretime)
FK: tckno references driver
FK: (plate,route
id, departure_time) references voyage

associatedassistant(tckno, plate, routeid, departuretime)
FK: tckno references assistant
FK: (plate,route
id, departure_time) references voyage

ticket(tckno, plate, routeid, departuretime, seat, paymenttype, paymenttime, price)
FK: tck
no references customer
FK: (plate,routeid, departuretime) references voyage

Detailed Schemas

staff

Relational Model: staff(tckno, name, salary, phone, homeaddress, startdate)
Functonal Dependencies: tck
no -> name, salary, phone, homeaddress, startdate
Candidate Keys: {(tckno)}
Normal Form: BCNF
Table Definition:
create table staff (
tck
no char(8) primary key,
name varchar(50) not null,
salary numeric() not null,
phone varchar(15) not null,
homeaddress varchar(100) not null,
start
date varchar(10) not null
);

system_user

Relational Model: systemuser(tckno, password)
Functional Dependencies: tckno -> password
Candidate Keys: {(tck
no)}
Normal Form: BCNF
Table Definition:
create table systemuser (
tck
no char(8) primary key,
password varchar(20) not null,
foreign key (tck_no) references staff
);

manager

Relational Model: manager(tckno, position)
Functional Dependencies: tck
no -> position
Candidate Keys: {(tckno)}
Normal Form: BCNF
Table Definition:
create table manager (
tck
no char(11) primary key,
position varchar(40),
foreign key (tck_no) references staff
);

sales_person

Relational Model: salesperson(tckno, officecity, officeaddress)
Functional Dependencies: tckno -> officecity, officeaddress
Candidate Keys: {(tck
no)}
Normal Form: BCNF
Table Definition:
create table salesperson (
tckno char(11) primary key,
office
city varchar(20) not null,
officeaddress varchar(100) not null,
foreign key (tck
no) references staff,
foreign key (officecity, officeaddress) references sales_office
);

terminal_agent

Relational Model: terminalagent(tckno, terminalcity, terminaladdress)
Functional Dependencies: tckno -> terminalcity, terminaladdress
Candidate Keys: {(tck
no)}
Normal Form: BCNF
Table Definition:
create table terminalagent (
tck
no char(11) primary key,
terminalcity varchar(20) not null,
terminal
address varchar(100) not null,
foreign key (tckno) references staff,
foreign key (office
city, officeaddress) references salesoffice
);

sales_office

Relational Model: salesoffice(city, address, phone)
Functional Dependencies: city, address -> phone
Candidate Keys: {(city, address)}
Normal Form: BCNF
Table Definition:
create table sales
office (
city varchar(20) primary key,
address varchar(100) not null,
phone varchar(15) not null
);

driver

Relational Model: driver(tckno, licenseno)
Functional Dependencies: tckno -> licenseno
Candidate Keys: {(tckno)}
Normal Form: BCNF
Table Definition:
create table driver (
tck
no char(11) primarykey,
license
no char(7) not null
foreign key (tck_no) references staff,
);

rent

Relational Model: rent(plate, starttime, endtime, price, rentedfrom)
Functional Dependencies: plate, start
time -> endtime, price, rentedfrom
Candidate Keys: {(plate, starttime)}
Normal Form: BCNF
Table Definition:
create table rent (
plate varchar(10) primary key,
start
time varchar(10) not null,
endtime varchar(10),
price numeric(4,2) not null,
rented
from varchar(20) not null,
foreign key (plate) references bus
);

rented_driver

Relational Model: renteddriver(tckno, plate, starttime)
Functional Dependencies:
Candidate Keys: {(tck
no, plate, starttime)}
Normal Form: BCNF
Table Definition:
create table rented
driver (
tckno char(11) primary key,
plate varchar(10) primary key,
start
time varchar(10) primary key,
foreign key (tckno) references driver,
foreign key (plate, start
time) references rent
);

assistant

Relational Model: assistant(tckno, rank)
Functional Dependencies: tck
no -> rank
Candidate Keys: {(tckno)}
Normal Form: BCNF
Table Definition:
create table assistant (
tck
no char(11) primary key,
rank varchar(20),
foreign key (tck_no) references staff
);

rented_assistant

Relational Model: rentedassistant(plate, starttime, tckno)
Functional Dependencies: -
Candidate Keys: {(plate, start
time, tckno)}
Normal Form: BCNF
Table Definition:
create table rented
assistant (
plate varchar(10) primary key,
starttime varchar(10) primary key,
tck
no char(11) primary key,
foreign key (plate, starttime) references rent,
foreign key (tck
no) references assistant
);

customer

Relational Model: customer(tckno, name, surname, dateofbirth, gender)
Functional Dependencies: tch
no -> name, surname, dateofbirth, gender
Candidate Keys: {(tckno)}
Normal Form: BCNF
Table Definition:
create table customer (
tck
no char(10) primary key,
name varchar(35) not null,
surname varchar(15) not null,
dateofbirth varchar(10),
gender char(1)
);

rented_by

Relational Model: rentedby(tckno, plate, starttime)
Functional Dependencies: -
Candidate Keys: {(tck
no, plate, starttime)}
Normal Form: BCNF
Table Definition:
create table rented
by(
tckno char(11) primary key,
plate varchar(10) primary key,
start
time varchar(10) primary key,
foreign key (tck_no) references customer,
foreign key (plate) references bus,
);

garage

Relational Model: garage(city, address, phone, capacity)
Functional Dependencies: city, address -> phone, capacity
Candidate Keys: {(city, address)}
Normal Form: BCNF
Table Definition:
create table garage (
city varchar(20) primary key,
address varchar(100) primary key,
phone varchar(15) not null,
);

is_at

Relational Model: isat(city, address, plate)
Functional Dependencies: -
Candidate Keys: {(city, address, plate)}
Normal Form: BCNF
Table Definition:
create table is
at (
city varchar(20) primary key,
address varchar(100) primary key,
plate varchar(10) primary key,
foreign key (city, address) references garage,
foreign key (plate) references bus
);

bus_type

Relational Model: bustype(brand, model, year, layout, passengercapacity, storagecapacity, height, width, length)
Functional Dependencies: brand, model, year -> layout, passengercapacity, storagecapacity, height, width, length
Candidate Keys: {(brand, model, year)}
Normal Form: BCNF
Table Definition:
create table bustype (
brand varchar(20) primary key,
model varchar(20) primary key,
year char(4) primary key,
layout smallint not null,
passenger
capacity smallint not null,
storage_capacity numeric(3,2) not null,
height numeric(1,2),
width numeric(1,2),
length numeric(2,1)
);

bustype_feature

Relational Model: bustypefeature(brand, model, year, featurename)
Functional Dependencies: -
Candidate Keys: {(brand, model, year, featurename)}
Normal Form: BCNF
Table Definition:
create table bustype
feature (
brand varchar(20) primary key,
model varchar(20) primary key,
year char(4) primary key,
featurename varchar(30) primary key,
foreign key (brand, model, year) references bust
type,
);

terminal

Relational Model: terminal(city, address, phone, capacity)
Functional Dependencies: city, address -> phone, capacity
Candidate Keys: {(city, address)}
Normal Form: BCNF
Table Definition:
create table terminal (
city varchar(20) primary key,
address varchar(100) primary key,
phone varchar(15) not null,
capacity smallint not null
);

bus

Relational Model: bus(plate, brand, model, year, roamingdistance, startdate, isoperational)
Functional Dependencies: plate -> brand, model, year, raoming
distance, startdate, isoperational
Candidate Keys: {(plate)}
Normal Form: BCNF
Table Definition:
create table bus (
plate varchar(10) primary key,
brand varchar(20) primary key,
model varchar(20) primary key,
year char(4) primary key,
roamingdistance int default 0 not null,
start
date varchar(10) not null,
isoperational char(1) not null,
foreign key (brand, model, year) references bust
type
);

route

Relational Model: route(routeid, departcity, departaddress, arrivecity, arriveaddress, estimatedduration, distance, numberofbreaks)
Functional Dependencies: routeid -> departcity, departaddress, arrivecity, arriveaddress, estimatedduration, distance, numberofbreaks)
Candidate Keys: {(routeid)}
Normal Form: BCNF
Table Definition:
create table route (
route
id char(12) primary key,
departcity varchar(20) not null,
depart
address varchar(100) not null,
arrivecity varchar(20) not null,
arrive
address varchar(100) not null,
estimatedduration int,
distance int not null,
number
ofbreaks smallint default 0 not null,
foreign key (depart
city, departaddress) references terminal,
foreign key (arrive
city, arrive_address) references terminal
);

stopover

Relational Model: stopover(city, address, routeid)
Functional Dependencies: -
Candidate Keys: {(city, address, route
id)}
Normal Form: BCNF
Table Definition:
create table stopover (
city varchar(20) primary key,
address varchar(100) primary key,
routeid char(12) primary key,
foreign key (route
id) references route,
foreign key (city, address) references terminal
);

service_area

Relational Model: servicearea(address)
Functional Dependencies: -
Candidate Keys: {(address)}
Normal Form: BCNF
Table Definition:
create table service_area (
address varchar(100) primary key
);

break

Relational Model: break(routeid, address, duration)
Functional Dependencies: route
id, address -> duration
Candidate Keys: {(routeid, address)}
Normal Form: BCNF
Table Definition:
create table break (
route
id char(12) primary key,
address varchar(100) primary key,
duration int not null,
foreign key (routeid) references route,
foreign key (address) references servise
area
);

voyage

Relational Model: voyage(plate, routeid, departuretime, arrivaltime, price, occupiedseats)
Functional Dependencies: plate, routeid, departuretime -> arrivaltime, price
Candidate Keys: {(plate, route
id, departuretime)}
Normal Form: BCNF
Table Definition:
create table voyage (
plate varchar(10) primary key
route
id char(12) primary key
departuretime varchar(10) primary key
arrival
time varchar(10),
price numeric(3,2) not null,
occupiedseats int not null,
foreign key (plate) references bus,
foreign key (route
id) references route
);

reservation

Relational Model: reservation(tckno, plate, routeid, departuretime, seat, time, price)
Functional Dependencies: tck
no, plate, routeid, seat -> time, price
Candidate Keys: {(tck
no, plate, routeid, seat)}
Normal Form: BCNF
Table Definition:
create table reservation (
tck
no char(11) primary key,
plate varchar(10) primary key,
routeid char(12) primary key,
departure
time varchar(10) primary key,
seat char(2) primary key,
time varchar(10) not null,
price numeric(3,2) not null,
foreign key (tckno) references customer,
foreign key (plate,route
id, departure_time) references voyage
);

associated_driver

Relational Model: associateddriver(tckno, plate, routeid, departuretime)
Functional Dependencies: -
Candidate Keys: {(tckno, plate, routeid, departuretime
Normal Form: BCNF
Table Definition:
create table associated
driver (
tckno char(11) primary key,
plate varchar(10) primary key,
route
id char(12) primary key,
departuretime varchar(10) primary key,
foreign key (tck
no) references customer,
foreign key (plate,routeid, departuretime) references voyage
);

associated_assistant

Relational Model: associatedassistant(tckno, plate, routeid, departuretime)
Functional Dependencies: -
Candidate Keys: {(tckno, plate, routeid, departuretime)}
Normal Form: BCNF
Table Definition:
create table associated
assistant (
tckno char(11) primary key,
plate varchar(10) primary key,
route
id char(12) primary key,
departuretime varchar(10) primary key,
foreign key (tck
no) references customer,
foreign key (plate,routeid, departuretime) references voyage
);

ticket

Relational Model: ticket(tckno, plate, routeid, departuretime, seat, paymenttype,paymenttime, price)
Functional Dependencies: tck
no, plate, routeid, departuretime, seat -> paymenttype, paymenttime, price
Candidate Keys: {(tckno, plate, routeid, departuretime, seat)}
Normal Form: BCNF
Table Definition:
create table ticket (
tck
no char(11) primary key,
plate varchar(10) primary key,
routeid char(12) primary key,
departure
time varchar(10) primary key,
seat char(2) primary key,
paymenttype varchar(5) not null,
payment
time varchar(1o) not null,
price numeric(3,2) not null,
foreign key (tckno) references customer,
foreign key (plate,route
id, departure_time) references voyage
);

Functional Dependencies and Normalization of Tables

All functional dependencies are shown in section 2.2. Detailed Schemas. All the relations are already in BCNF form. There is no need for decomposition. 

Functional Components

Use Cases/ Scenarios

Use Case Diagram

Customer Operations

Salesperson Operations

Terminal Agent Operations

Manager Operations

Algorithms

Modifying Entities

Manager can add, remove and edit entities such as busses, terminals, routes, staff etc. These function first check if the current user has the manager privileges and display an error if it does not. An input form is display for an add function. Input is validated in both client-side and server-side. If input is valid, new rows are added to the corresponding tables. A list of existing entities are display in a table for a remove and edit functions. Items selected for removal are deleted from database, or an edit form is displayed for edit functions.

Creating Voyage

Manager can create voyages using existing busses and routes. The input form for creating voyages have a timetable. Manager can create a single voyage as well as multiple voyages in a single step. Validation step determines the schedule conflicts and displays related errors.

Making Reservation

Salesperson (in sales-office) and customer (on the internet) can make reservations for voyages. Voyage and seat options are displayed in the reservation form. User cannot make reservation for a sold or reserved seat.

Purchasing/Selling Ticket

A ticket is either sold by a salesperson or purchased by a customer online. Either way, the inputs and ticket creation are the same. A ticket can be purchased directly, or a reservation can be converted to a ticket by paying the fee. If a new ticket is being created, a similar form to the reservation form is displayed and filled. If customer is buying ticket for a reservation, this step is omitted. In the last step, the payment is done.

Canceling Reservation

Salesperson and customer can list and cancel reservations. Salesperson has right to cancel any reservation whereas customer can only cancel his/her reservations.

Renting Bus

Busses can be rented from the sale-offices. Hence, only salesperson has the ability to rent a bus. During the process, salesperson selects the bus and time range for renting. If the selected bus has a voyage anytime during the time range, renting cannot be done and an error is displayed. Renting fee is entered by the salesperson.

Data Structures

Built-in MySQL data structures will be used. There is no need for additional data types.

User Interface Design and Corresponding SQL Statements

Login

Input: @tck_no, @password
Process: User provides his tc identity number and password. System checks if a corresponding record exists. If it does, then the user is authorized. Otherwise an error screen is displayed.

SQL Statements:

SELECT *  
FROM systemuser  
WHERE tck_no = @tck_no  
  AND password=@password  

Bus Rental

Input: @endtime, @price, @rentedfrom
Process: Only a salesperson can make rental operation. There is no customer interface for this purpose. Salesperson asks for list of available buses. System shows a list of all buses that are currently in one of the garages (not travelling). Salesperson clicks “rent” and enters customer information through another form.

SQL Statements:

SELECT plate,  
       model,  
       brand,  
       city,  
       address  
FROM bus,  
     is_at  
WHERE is_operational = 'operational'  
  AND bus.plate = is_at.plate  
variable passed: @plate  
INSERT INTO rent  
VALUES(@plate,  
       getCurrentDate(),  
       @end_time,  
       @price,  
       @rented_from)  

Manager Dashboard

Input: -
Process: System shows various information about active voyages, busses, garages and active rentals.

SQL Statements:

List voyages:

SELECT v.departure_time,  
       v.arrival_time,  
       r.depart_ciy,  
       r.depart_address,  
       r.arrive_city,  
       r.arrive_address,  
       b.model  
FROM voyage v,  
     bus b,  
     route r  
WHERE v.plate=b.plate  
  AND v.route_id = r.id  
ORDER BY v.departure_time  

List buses:

SELECT b.plate,  
       b.model,  
       i.city,  
       i.address  
FROM bus b, is_at i,  
WHERE b.plate=i.plate  
  OR (b.plate = v.plate  
      AND v.arrival_time IS NULL)  

List garages:

SELECT g.city,  
       g.address,  
       count(i.plate)  
FROM garage g,  
     is_at i  
WHERE i.cty=g.city  
  AND i.address = g.address  
GROUP BY i.city,  
         i.address  

List rentals:

SELECT c.name,  
       r.start_time,  
       r.end_time,  
       b.model,  
FROM bus b,  
     rent r,  
     rented_by,  
     customer c  
WHERE r.plate=b.plate  
  AND rented_by.plate = r.plate  
  AND r.start_time = rented_by.start_time rented_by.tck_no = c.tck_no  

List Voyages:

Input: @depcity, @arrcity, @dep_time
Process: Salesperson enters departure city, arrival city and a date. System shows appropriate voyages.

SQL Statements:

SELECT r.depart_city,  
       r.depart_address,  
       r.arrive_city,  
       r.arrive_address,  
       v.departure_time,  
       v.arrival_time,  
       v.occupied_seats,  
       bt.passanger_capacity b.model,  
FROM bus b,  
     route r,  
     voyage v,  
     bustype bt  
WHERE r.id = v.route_id  
  AND v.plate = b.plate  
  AND bt.brand = b.brand  
  AND bt.model = b.model  
  AND bt.year = b.year  
  AND r.depart_city=@dep_city  
  AND r.arrive_city = @arr_city  
  AND v.departure_time = @dep_time  

List Reservations

Input: @time
Process: Salesperson wants to list all the reservations on a specific day. He enters the day. Sytem lists all the reservations mad efor that particular day. Later salesperson may filter these results by name. Salesperson can cancel a reservation by clicking the button. System passes required variables to cancel query.

SQL Statements:

SELECT c.name,  
    c.tck_no,  
       c.surname,  
       res.price,  
    res.seat,  
    ro.id,  
       ro.depart_city,  
       ro.arrive_city,  
    v.plate  
FROM customer c,  
     reservation res,  
     route ro,  
     voyage v  
WHERE res.tck_no = c.tck_no  
  AND res.plate = v.plate  
  AND res.route_id = v.route_id  
  AND res.departure_time = v.departure_time  
  AND v.route_id = ro.id  
  AND res.time=@time  

Cancel:

DELETE  
FROM reservation  
WHERE tck_no=@tck_no  
  AND plate=@plate  
  AND route_id=@route_id  
  AND departure_time=@dtime  
  AND seat=@seat  

Create Ticket

Input: @tckno,@plate,@routeid, @departuretime, @seat, @paymenttype, @price, @name, @surname, @dateofbirth, @gender
Process: Salesperson chose a voyage before this step. All voyage, bus and route information was passed from previous step. In this step salesperson provides tckno, seat, paymenttype, name, surname, dateofbirth, gender inputs.

SQL Statements:

INSERT INTO ticket  
VALUES(@tck_no,  
       @plate,  
       @route_id,  
       @departure_time,  
       @seat,  
       @payment_type,  
       getCurrentTime(),  
       @price)  

INSERT INTO customer(@tck_no, @name, @surname, @dateofbirth, @gender)
*customer table are protected from having duplicates by a trigger

Make Reservation

Input: @tckno,@plate,@routeid, @departuretime, @seat, @paymenttype, @price, @name, @surname, @dateofbirth, @gender
Process: Salesperson chose a voyage before this step. All voyage, bus and route information was passed from previous step. In this step salesperson provides tck_no, seat, name, surname, dateofbirth, gender inputs.

SQL Statements:

INSERT INTO reservation  
VALUES(@tck_no,  
       @plate,  
       @route_id,  
       @departure_time,  
       @seat,  
       getCurrentTime(),  
       @price)  

INSERT INTO customer(@tck_no, @name, @surname, @dateofbirth, @gender)
*customer table are protected from having duplicates by a trigger

Edit Bus

Input: @plate, @type, @is_operational
Process: Manager chose a bus to edit at previous step. Plate information was passed to this step from the previous one. He enters new information and system updates the bus info.

SQL Statements:

UPDATE bus  
SET is_operational=@is_operational,  
    type=@type  
WHERE plate=@plate  

Edit/Remove Bus Type

Input: @model,@brand, @layout,@storagecapacity, @passangercapacity,@height, @width,@length,@year
Process: Manager wants to list bus types. System makes a query to list all the bus types. System makes another query to retrieve features for bus types for each bus type and combine the information. Manager later can filter bus types by model, brand or year. Delete operation is only valid when no bus is of that bus type. This restriction is granted by an assertion which will be introduced in the next section of this document. Editing a bus type is done by another form after clicking “edit” here. Required information is passed to next form.

SQL Statements:

SELECT brand,  
       model,  
       year,  
       layout,  
       passanger_capacity  
FROM bustype  

SELECT feature_name features  
FROM bustype_feature  
WHERE brand=@brand  
  AND model=@model  
  AND YEAR=@year  

DELETE  
    FROM bustype  
    WHERE model=@model  
      AND brand=@brand  
      AND year=@year  

UPDATE bustype  
    SET model=@model,  
        brand=@brand,  
        layout=@layout,  
        storage_capacity=@storage_capacity,  
        passanger_capacity=@passanger_capacity,  
        height=@height,  
        width=@width,  
        length=@length ,  
        year=@year  

Terminal Agent Dashboard

Input: @time, @plate, @departuretime, @arrivaltime
Process: Terminal agent is responsible for entering arrival and departure times of buses. System shows a list of arriving buses. Select statement for listing is the same as salesperson’s. Update of departure times is done via another form which is accessible from this screen by clicking “edit” button. In that screen, terminal agent can enter arrival time.

SQL Statements:

UPDATE voyage  
SET arrival_time=@arrival_time  
WHERE plate=@plate  
  AND route_id = @route_id  
  AND departure_time=@departure_time  

Customer Dashboard

Input: @departurecity, @arrivalcity, @departure_date
Process: Customer wants to buy a ticket. He provides departure, arrival cities and a date. System shows available voyages.

SQL Statements:

SELECT r.depart_city,  
       r.depart_address,  
       r.arrive_city,  
       r.arrive_address,  
       v.departure_time,  
       v.arrival_time,  
       b.model,  
       bt.passanger_capacity,  
       v.occupied_seats  
FROM bus b,  
     bustype bt,  
     route r,  
     voyage v  
WHERE r.id = v.route_id  
  AND bt.model = b.model  
  AND bt.brand=b.brand  
  AND bt.year=b.year  
  AND v.plate = b.plate  
  AND r.depart_city=@departure_city  
  AND r.arrive_city = @arrival_city  
  AND v.departure_time = @departure_time  
  AND v.occupied_seats<bt.passanger_capacity  

Advanced Database Components

Views

Note: Only direct user of the database is the front-end application, hence views actually are not needed in this case. But for educational purposes, we provide views as actors of use-cases are direct users of the database.

Stored Procedures

Reports

Triggers

Constraints

We will use MySQL Server as database management system for our project. We are planning to use PHP, Code Igniter and JavaScript for software and user interface parts of our project. CodeIgniter is a PHP framework which is optimized for MVC use.