ISM6218.001F16
ADVANCED DATABSE MANAGEMENT SYSTEMS
FINAL GROUP PROJECT
“E-COMMERCE SYSTEMS”
Group Members
Himank Vats (U87964346)
Jijo Johny (U12605351)
Tess Thomas (U66417789)
Vrishali Giri (U40856469)
CONTENTS
Executive Summary
Assumptions
Part 1: Database Design
Section 1.1: Data Integrity
Section 1.2: Data Generation and Loading
Section 1.3: Logical Database Design
Section 1.3: Physical Database Design
Part 2: Query Writing
Section 2.1: SQL Queries
Section 2.2: Database Programming
Part 3: Performance Tuning
Section 3.1: Indexing
Section 3.2: Parallelism
Part 4: Other Topics
Section 4.1: DBA scripts
Section 4.2: Database Security
Executive Summary
The use of internet technology for performing business transaction has grown
exponentially over the decade or so. Almost all companies have migrated their
transactions to e-commerce and remaining ones are on their way to do so! While B2B
ecommerce platforms are making billions of revenues, B2C has become successful in
establishing good relation with huge consumer followers nonetheless.
The rise of online shopping have turned shoppers into promiscuous deal-hunters armed
with mobile technology that allows them to shop whenever they want, however they
want with whomever they want.
The goal of this project is to build an E-Commerce system for online shoppers giving them
flexibility to shop their favourite items without having to visit any shop. An e-commerce
value chain represents a set of sequences which involves the interactions between online
shoppers and e-commerce systems. We have focused on easy-to-understand user
interface and query optimization in order to reduce the query processing time and give a
user an hasslefree shopping experience. User role privileges are assigned in order to
restrict the access between normal user and administrator. The system will generate up-
to-date data based on number of items sold, availabe inventory and changes in prices.
Below is the weights distribution according to the areas covered –
Topic Area Description Points
Database Design
- Data Integrity
- Data Generation and Loading
- Logical Database Design
- Physical Database Design
30
Query Writing
- SQL Queries
- Stored Procedure
25
Performance Tuning
- Indexing
- Parallelism
30
Other Topics
- DBA scripts
- Database security
15
Assumptions
1. INV_Item_Number from the Inventory Item table should be present in the Order
Item but not as foreign key. Because if it is declared as foreign key then the
referential integrity will be violated when INV_Item_Number from the Inventory
Item table is deleted.
2. Join ORDER_ITEM and INVENTORY_ITEM by outer join rather than a natural join so
that order item with deleted product will be included.
3. Credit card table has the 16-digit credit number as primary key this it is unique.
4. Order table provides detail on products and how many were ordered for a given
invoice.
5. Residential and shipping address are stored for customers.
6. Customers can have multiple credit cards tied to their account. It can be different
names and billing address.
7. Invoice contains the order details, shipping information and address of customer.
Part 1: Database Design
Section 1.1 : Logical Database Design
Below relational diagram depicts the interrelations between all the database tables. The
se relationships are established by defining foreign key constraints.
Section 1.2 : Physical Database Design
We have generated below relational diagram using SQL developer modeler function.
Section 1.3 : Data Integrity
Below are the backend table creation queries which we have used.
A. INVENTORY_ITEM
CREATE TABLE "DB215"."INVENTORY_ITEM"
( "INV_ITEM" NUMBER(5,0) NOT NULL ENABLE,
"INV_TITLE" VARCHAR2(6 BYTE) NOT NULL ENABLE,
"INV_PRICE" NUMBER(5,0),
"INV_TIMESTAMP" DATE,
CONSTRAINT "INV_ITEM_PK" PRIMARY KEY ("INV_ITEM") );
B. ORDER_ITEM
CREATE TABLE "DB215"."ORDER_ITEM"
( "ORDER_ITEM" NUMBER(5,0) NOT NULL ENABLE,
"INV_ITEM" NUMBER(5,0) NOT NULL ENABLE,
"ORDER_ID" NUMBER NOT NULL ENABLE,
"ORDER_QUANTITY" NUMBER(5,0),
"ORDER_AMOUNT" NUMBER(5,0),
"ORDER_TIMESTAMP" DATE,
"SHIPPING_NUMBER" NUMBER(5,0),
CONSTRAINT "ORDER_ITEM_PK" PRIMARY KEY ("ORDER_ITEM")
CONSTRAINT "INV_ITEM_FK" FOREIGN KEY ("INV_ITEM")
REFERENCES "DB215"."INVENTORY_ITEM" ("INV_ITEM") ENABLE,
CONSTRAINT "ORDER_ID_FK" FOREIGN KEY ("ORDER_ID")
REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE,
CONSTRAINT "SHIPPING_NUMBER_FK1" FOREIGN KEY ("SHIPPING_NUMBER")
REFERENCES "DB215"."SHIPPING" ("SHIPPING_NUMBER") ENABLE );
C. INVOICE
CREATE TABLE "DB215"."INVOICE"
( "INVOICE_NUMBER" NUMBER(5,0) NOT NULL ENABLE,
"ORDER_ID" NUMBER NOT NULL ENABLE,
"ADDRESS_NUMBER" NUMBER(5,0) NOT NULL ENABLE,
"INVOICE_CREATION_DATE" DATE,
"INVOICE_STATE" VARCHAR2(5 BYTE),
"SHIPPING_NUMBER" NUMBER(5,0),
CONSTRAINT "INVOICE_NUMBER_PK" PRIMARY KEY ("INVOICE_NUMBER")
CONSTRAINT "ADDRESS_NUMBER_FK1" FOREIGN KEY ("ADDRESS_NUMBER")
REFERENCES "DB215"."USER_INFO" ("ADDRESS_NUMBER") ENABLE,
CONSTRAINT "ORDER_ID_FK2" FOREIGN KEY ("ORDER_ID")
REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE,
CONSTRAINT "SHIPPING_NUMBER_FK" FOREIGN KEY ("SHIPPING_NUMBER")
REFERENCES "DB215"."SHIPPING" ("SHIPPING_NUMBER") ENABLE );
D. USER_SESSION
CREATE TABLE "DB215"."USER_SESSION"
( "SESSION_ID" NUMBER(5,0) NOT NULL ENABLE,
"SESSION_CLICKS" NUMBER(5,0),
"SESSION_TIME" DATE,
"SESSION_IPADDRESS" VARCHAR2(100 BYTE),
"CART_ID" NUMBER(5,0) NOT NULL ENABLE,
"ACC_NUMBER" NUMBER(5,0),
CONSTRAINT "USER_SESSION_PK" PRIMARY KEY ("SESSION_ID")
CONSTRAINT "CART_ID_FK" FOREIGN KEY ("CART_ID")
REFERENCES "DB215"."SHOPPING_CART" ("CART_ID") ENABLE,
CONSTRAINT "ACC_NUMBER_FK2" FOREIGN KEY ("ACC_NUMBER")
REFERENCES "DB215"."USER_ACCOUNT" ("ACC_NUMBER") ENABLE );
E. USER_ACCOUNT
CREATE TABLE "DB215"."USER_ACCOUNT"
( "ACC_NUMBER" NUMBER(5,0) NOT NULL ENABLE,
"ACC_ID" VARCHAR2(50 BYTE) NOT NULL ENABLE,
"ACC_PASSWORD" VARCHAR2(50 BYTE) NOT NULL ENABLE,
"ACC_TIME" DATE,
"ACC_VISITS" NUMBER(5,0),
"ACC_N0_TRANS" NUMBER(5,0),
"SESSION_ID" NUMBER(5,0) NOT NULL ENABLE,
"USER_ROLE" VARCHAR2(15 BYTE),
CONSTRAINT "USER_ACCOUNT_PK" PRIMARY KEY ("ACC_NUMBER")
CONSTRAINT "SESSION_ID_FK" FOREIGN KEY ("SESSION_ID")
REFERENCES "DB215"."USER_SESSION" ("SESSION_ID") ENABLE );
F. CREDIT_CARD
CREATE TABLE "DB215"."CREDIT_CARD"
( "CC_NUMBER" NUMBER(16,0) NOT NULL ENABLE,
"CC_HOLDER_NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE,
"CC_EXPIRY_DATE" DATE NOT NULL ENABLE,
"ACC_NUMBER" NUMBER(6,0) NOT NULL ENABLE,
"ADDRESS_NUMBER" NUMBER(6,0) NOT NULL ENABLE,
CONSTRAINT "CREDIT_CARD_PK" PRIMARY KEY ("CC_NUMBER")
CONSTRAINT "ACC_NUMBER_FK" FOREIGN KEY ("ACC_NUMBER")
REFERENCES "DB215"."USER_ACCOUNT" ("ACC_NUMBER") ENABLE,
CONSTRAINT "ADDRESS_NUMBER_FK" FOREIGN KEY ("ADDRESS_NUMBER")
REFERENCES "DB215"."USER_INFO" ("ADDRESS_NUMBER") ENABLE );
G. SHOPPING_CART
CREATE TABLE "DB215"."SHOPPING_CART"
( "CART_ID" NUMBER(5,0) NOT NULL ENABLE,
"INV_ITEM" NUMBER(5,0) NOT NULL ENABLE,
"ACTIVE" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"TIME_STAMP" DATE,
"QTY" NUMBER(2,0) NOT NULL ENABLE,
"SESSION_ID" NUMBER(5,0),
CONSTRAINT "SHOPPING_CART_PK" PRIMARY KEY ("CART_ID")
CONSTRAINT "INVENTORY_ITEM_FK1" FOREIGN KEY ("INV_ITEM")
REFERENCES "DB215"."INVENTORY_ITEM" ("INV_ITEM") ENABLE,
CONSTRAINT "SESSION_ID_FK1" FOREIGN KEY ("SESSION_ID")
REFERENCES "DB215"."USER_SESSION" ("SESSION_ID") ENABLE );
H. ORDERS
CREATE TABLE "DB215"."ORDERS"
( "ORDER_ID" NUMBER(5,0) NOT NULL ENABLE,
"ORDER_DATE" DATE NOT NULL ENABLE,
"TOTAL_AMT" NUMBER(5,0) NOT NULL ENABLE,
"STATES" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"ACC_NUMBER" NUMBER(5,0),
"SHIPPING_NUMBER" NUMBER(5,0),
CONSTRAINT "ORDERS_PK" PRIMARY KEY ("ORDER_ID")
CONSTRAINT "ACC_NUMBER_FK1" FOREIGN KEY ("ACC_NUMBER")
REFERENCES "DB215"."USER_ACCOUNT" ("ACC_NUMBER") ENABLE,
CONSTRAINT "SHIPPING_NUMBER_FK2" FOREIGN KEY ("SHIPPING_NUMBER")
REFERENCES "DB215"."SHIPPING" ("SHIPPING_NUMBER") ENABLE );
I. PAYMENT
CREATE TABLE "DB215"."PAYMENT"
( "PAYMENT_ID" NUMBER(5,0) NOT NULL ENABLE,
"ORDER_ID" NUMBER(5,0) NOT NULL ENABLE,
"CC_NUMBER" NUMBER(16,0) NOT NULL ENABLE,
"AMOUNT" NUMBER(5,0),
"STATES" VARCHAR2(20 BYTE),
"TIME_STAMP" DATE,
CONSTRAINT "PAYMENT_PK" PRIMARY KEY ("PAYMENT_ID")
CONSTRAINT "PAYMENT_ORDERS_FK1" FOREIGN KEY ("ORDER_ID")
REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE,
CONSTRAINT "PAYMENT_CREDIT_CARD_FK2" FOREIGN KEY ("CC_NUMBER")
REFERENCES "DB215"."CREDIT_CARD" ("CC_NUMBER") ENABLE );
J. USER_INFO
CREATE TABLE "DB215"."USER_INFO"
( "ADDRESS_NUMBER" NUMBER(5,0) NOT NULL ENABLE,
"FULLNAME" VARCHAR2(255 BYTE) NOT NULL ENABLE,
"ADDRESS_LINE_1" VARCHAR2(255 BYTE) NOT NULL ENABLE,
"ADDRESS_LINE_2" VARCHAR2(255 BYTE),
"CITY" VARCHAR2(20 BYTE),
"STATE" VARCHAR2(255 BYTE),
"ZIP" NUMBER(5,0),
"CC_NUMBER" NUMBER(16,0),
CONSTRAINT "ADDRESS_NUMBER_PK" PRIMARY KEY ("ADDRESS_NUMBER")
CONSTRAINT "CC_NUMBER_FK1" FOREIGN KEY ("CC_NUMBER")
REFERENCES "DB215"."CREDIT_CARD" ("CC_NUMBER") ENABLE );
K. SHIPPING
CREATE TABLE "DB215"."SHIPPING"
( "SHIPPING_NUMBER" NUMBER(5,0) NOT NULL ENABLE,
"ORDER_ID" NUMBER(5,0) NOT NULL ENABLE,
"INVOICE_NUMBER" NUMBER(5,0) NOT NULL ENABLE,
"SHIPPING_METHOD" VARCHAR2(255 BYTE) NOT NULL ENABLE,
"SHIPPING_CHARGE" NUMBER(5,0) NOT NULL ENABLE,
"ZIP" NUMBER(5,0),
"SHIPPING_DATE" DATE NOT NULL ENABLE,
"ADDRESS_NUMBER" NUMBER(5,0),
CONSTRAINT "SHIPPING_NUMBER_PK" PRIMARY KEY ("SHIPPING_NUMBER")
CONSTRAINT "SHIPPING_ORDER_ID_FK" FOREIGN KEY ("ORDER_ID")
REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE,
CONSTRAINT "SHIP_INVOICE_NUMBER_FK" FOREIGN KEY ("INVOICE_NUMBER")
REFERENCES "DB215"."INVOICE" ("INVOICE_NUMBER") ENABLE,
CONSTRAINT "ADDRESS_NUMBER_FK2" FOREIGN KEY ("ADDRESS_NUMBER")
REFERENCES "DB215"."USER_INFO" ("ADDRESS_NUMBER") ENABLE );
Section 1.4 : Data Generation and Loading
A. Data Generation
 The database design has 11 tables and the data is generate dfor all of them.
 The user account table includes user_id, password, number of visits, total
transaction amount.
 Shipping information can be tracked form the shipping table.
 Payment information can be tracked from the payment table.
 The table user_session has 1000 rows rest all the tables 5000 rows each.
The external data is created using:
https://www.mockaroo.com
http://www.yandataellan.com
The user_session data has been created using the online generator as shown in the
above snapshot. We can select the data type for each attribute value as specified
in the data base design and download the csv format using the download button.
Here the session_id is created as random number ranging from 80000 to 87000,
session_clicks as number ranging from 1 to 10, session time ranging from
11/10/2015 to 11/10/2016 and session_ip_address as ip address v4. Using this we
can generate 1000 rows.
Below is the screenshot for creating tables with 5000 rows each.
B. Data Loading
All the required data is initially generated using the external data generator and is
stored in the spreadsheets. Data is then imported to SQL developer using the
import feature.
Following are steps to import data to table:
1. Right click on the table and select “import data”.
2. Select the spread sheet containing data.
3. Select the format and spread sheet in the xls file (select headers).
4. Import method is insert.
5. Add all the columns required from file.
6. Map all the columns in spread sheet to columns in the database.
7. Verify parameters before import.
8. If the verification is successful, click finish to import the data.
Below images shows the data import wizard and the way the data in imported into
the INVENTORY_ITEM table.
Right click on the table and select “import data”
Data Import Wizard
Data Preview in Data Import Wizard
Choose Column in Data import Wizard
Column Definition in Data import Wizard
Column Definition for Inventory_Item Table in Data import Wizard
Final Step in Data Import Wizard
Data imported successful!
Data in the Inventory_Item Table
The number of record in each table is shown below:
Table Number of Tuples
INVENTORY_ITEM 5000
ORDER_ITEM 5000
INVOICE 5000
USER_SESSION 1000
USER_ACCOUNT 5000
CREDIT_CARD 5000
SHOPPING_CART 5000
ORDERS 5000
PAYMENT 5000
USER_INFO 5000
SHIPPING 5000
Part 2: Query Writing
Section 2.1: SQL Queries
Query 1: Inventory item which is most ordered.
SELECT INVENTORY_ITEM.INV_TITLE AS NAME, SUM(SHOPPING_CART.QTY) AS
TOTAL_QUANTITY
FROM SHOPPING_CART
INNER JOIN INVENTORY_ITEM
ON SHOPPING_CART.INV_ITEM = INVENTORY_ITEM.INV_ITEM
GROUP BY INVENTORY_ITEM.INV_TITLE
ORDER BY SUM(SHOPPING_CART.QTY)DESC;
Query 2: Total shipments done in month of march.
SELECT COUNT (SHIPPING_NUMBER)
FROM SHIPPING
WHERE SHIPPING_DATE BETWEEN '1/3/2016' AND '31/3/2016';
Query 3: Top selling items by Price.
SELECT INVENTORY_ITEM.INV_TITLE AS NAME ,SUM(INVENTORY_ITEM.INV_PRICE) AS
SALES, SUM(SHOPPING_CART.QTY) AS QUANTITY
FROM SHOPPING_CART
INNER JOIN INVENTORY_ITEM
ON SHOPPING_CART.INV_ITEM = INVENTORY_ITEM.INV_ITEM
GROUP BY INVENTORY_ITEM.INV_TITLE
ORDER BY SUM(INVENTORY_ITEM.INV_PRICE)DESC;
Query 4: Top Customers by Purchase Amount
SELECT UA.ACC_NUMBER,UA.ACC_ID, SUM(O.TOTAL_AMT) AS PURCHASES
FROM ORDERS O
INNER JOIN USER_ACCOUNT UA
ON O.ACC_NUMBER=UA.ACC_NUMBER
GROUP BY UA.ACC_NUMBER,UA.ACC_ID
ORDER BY SUM(O.TOTAL_AMT)DESC;
Query 5: All the orders with rejected payment
SELECT O.ORDER_ID, O.ORDER_DATE, O.TOTAL_AMT
FROM ORDERS O
JOIN PAYMENT P
ON O.ORDER_ID=P.ORDER_ID
WHERE P.STATES= 'FALSE' OR P.STATES='Failed'
ORDER BY O.TOTAL_AMT;
Query 6: Customers who haven’t placed any orders so far
SELECT UA.ACC_NUMBER, UA.ACC_ID
FROM ORDERS O
RIGHT OUTER JOIN USER_ACCOUNT UA
ON O.ACC_Number=UA.ACC_NUMBER
WHERE O.ACC_NUMBER IS NULL
GROUP BY UA.ACC_NUMBER, UA.ACC_ID
ORDER BY UA.ACC_NUMBER ;
Query 7: Users with more than 100 visits and have ordered high cost Items
SELECT UA.ACC_NUMBER, UA.ACC_ID, II.INV_PRICE
FROM USER_ACCOUNT UA
JOIN USER_SESSION US
ON UA.SESSION_ID = US.SESSION_ID
JOIN SHOPPING_CART SC
ON US.CART_ID = SC.CART_ID
JOIN INVENTORY_ITEM II
ON SC.INV_ITEM = II.INV_ITEM
WHERE UA.ACC_VISITS > 100
ORDER BY II.INV_PRICE DESC;
Section 2.2: Database Programming / Stored Procedures
Stored procedures in DBMS are group of SQL statements integrated with a programming
block, which can be named and stored in backend. Stored procedures can be shared and
invoked by their name from any program.
Below stored procedure is created to insert new items in inventory. The procedure performs
check on USER_ROLE value from table USER_ACCOUNT before inserting record into the table
If the user is ‘Admin’, only then the insertion is allowed. Procedure will come out of the loop
if the role is other than ‘Admin’. In other words, every time Administrator tries to insert new
record in INVENTORY_ITEM table, procedure ‘UpdateInventory’ is invoked.
Part 3: Performance Tuning
Section 3.1: Indexing
Indexing is an essential part of performance tuning in database design. It helps improving
the performance of query. We have used 2 types of indexing techniques while designing
database - B-Tree and Bitmap Indexing.
Before we begin explicitely creating indexes on tables, let us first take a look at current
status of indexes in our database.
The below query will extract the index structure from database schema.
As we can see, currently we have only primary key index type which was assigned while
creating tables. We will focus on tables those are densly populated and try to take a
measurable stance to improve the query retrival time to some extent.
B-Tree Index
Let us execute the below complex query without creating any explicit index on tables.
As we can see, the query execution time is 0.062 seconds and the cost of query is 21.
We decided to create a B-Tree index on table ORDER_ITEM and on column ORDER_ID.
Post index creation, we executed the same query again. We could see that this time the
query took only 0.072 seconds to fetch data and query cost is reduced to 13.
B-trees are the most widely used index type and a ubiquitous structure in computer
science. Let us now create Bitmap index on comparatively densed table and observe the
outcome.
Bitmap Index
Bitmap index structure uses bit-vector concept to indiacte which of the values occur in a
row.
Below query is executed without creating any index on tables used.
As we can see, the query execution took 2.21 seconds with the cost of query as 31.
We have created bitmap index on CREDIT_CARD table as below.
As we can see, the query execution time reduced to 0.21 secinds whereas query cost
has reduced to 21.
Adbms final group project report
Section 3.2: Parallelism
Parallel processing is used to speed up datbase operations. We can apply parallelism to
a single query to attain high speed. Parallelism is a natural fit for relational database
environment.
Step 1: Run the query
select acc_number,acc_password,acc_visits,session_id
from user_account;
Step 2: Alter the table to use parallelism.
ALTER TABLE user_Account PARALLEL (DEGREE 4);
Step 3: Run the query again and look at the new execution plan.
Adbms final group project report
Part 4: Other Topics
Section 4.1: DBA scripts
DBA scripts are an excellent ways to query data dictionary in order to better understand
what’s happening inside the database engine.
Below are few types of scripts an administrator can use in his routine checks.
A. Script 1
The below query will give the active sessions of the database. This is useful to monitor t
he database and to ensure the security of database.
SELECT NVL(s.username, '(oracle)') AS username,
s.osuser, s.sid,
p.spid, s.serial#,
s.lockwait, s.status,
s.service_name, s.module,
s.program,s.machine,
TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS login_time
FROM v$session s,
v$process p
WHERE s.paddr = p.addr
ORDER BY login_time;
B. Script 2
The below script displays the free space per data file. This is useful for monitoring the
datafiles when the storage is limited and this would help assimilate new datafiles.
Select df.tablespace_name,
df.file_name,
df.bytes/1024/1024 total_size,
nvl(fr.bytes/1024/1024,0) free_space,
((df.bytes-nvl(fr.bytes,0))/df.bytes)*100 pct_used
from (select sum(bytes) bytes,
file_id
from dba_free_space
group by file_id) fr,
dba_data_files df
where df.file_id = fr.file_id(+)
order by 1, df.file_id;
C. Script 3
It shows the background proccess that are running currently in database instance.
SELECT *
FROM v$bgprocess
WHERE PADDR <> '00'
ORDER BY DESCRIPTION;
D. Script 4
This script displays the blocks and data size of users.
SELECT OWNER,
SUM(BLOCKS) TOTALBLOCKS,
SUM(BYTES/(1024*1024)) TOTALMB
FROM DBA_SEGMENTS
GROUP BY OWNER
ORDER BY totalblocks;
E. Script 5
The below script displays the partitioning information. Partitioning helps in increasing
the availability of mission critical databse. Critical tables or indexes are divided into
partitions to reduce maintenance windows or recovery times or failures.
SELECT p.table_name,
p.partition_name,
p.tablespace_name,
p.initial_extent,
p.next_extent,
p.num_rows,
p.avg_row_len,
p.pct_increase
FROM dba_tab_partitions p
ORDER BY p.table_name, p.partition_name;
F. Script 6
This query displays the count fro the number of indexes for a particular user.
SELECT COUNT(INDEX_NAME) AS "INDEXES COUNT",
TABLE_OWNER
FROM DBA_INDEXES
GROUP BY TABLE_OWNER
HAVING TABLE_OWNER LIKE '%DB215%';
G. Script 7
This script is to kill session. Before killing the session we have to identify the
session that needs to be killed, if we kill the wrong session this can be very
destructive. If a session belonging to a background process is killed this would
cause an instance crash. To identify the session offending:
SELECT s.inst_id,
s.sid,
s.serial#,
p.spid,
s.username,
s.program
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';
Adbms final group project report
Section 4.2: Database Security
Data security will be applied to ensure that no unauthorized user can edit any critical
data from the USER ACCOUNT, PAYMENT, INVENTORY ITEM, ORDER ITEM, ORDER
DETAILS, SHIPPING, INVOICE, CREDIT CARD, SHOPPING CART, ADDRESS and USER
SESSION tables.
Roles will be assigned to all the players, security will be given to the users based on their
roles. Sensitive and confidential data has to be encrypted.
Encryption helps in preventing unauthorized access to both static as well as dynamic
data even if the data is copied, backed up or stored offline.
Data access is controlled rather than than database access.
Data redaction strategies are another useful way of controlling access to data. It masks
data at query time, so that the rules are aplied on the data being progressed.
User authentication is a way to control database access in Oracle DBMS and other
database systems. The three components are: users that must authenticate to access
the database, system and object privileges to further control access and finally roles that
can be used to organize groups of privileges.
Privileges that are only necessary are given to other users.
Without roles, granting privileges directly to individual and separate users would create
a confusing and unwieldy network of access rights.
A person with admin_role as ‘Administrator’ is only authorized to update all the
information from all the tables.
Granting authentication for roles:
Grant All on USER ACCOUNT for ‘Administrator’;
Grant All on PAYMENT for ‘Administrator’;
Grant All on INVENTORY ITEM for ‘Administrator’;
Grant All on ORDER ITEM for ‘Administrator’;
Grant All on ORDER DETAILS for ‘Administrator’;
Grant All on SHIPPING for ‘Administrator’;
Grant All on INVOICE for ‘Administrator’;
Grant All on CREDIT CARD for ‘Administrator’;
Grant All on SHOPPING CART for ‘Administrator’;
Grant All on ADDRESS for ‘Administrator’;
Grant All on USER SESSION for ‘Administrator’.

More Related Content

PPTX
Marcus Matthews
PPT
Bbva workshop
PPT
Manufacturing and sales management system
PPTX
Endeca information discovery for Oracle Receivables ( EBS)
PDF
Restaurent management system
PPTX
Data Warehouse Project
PDF
Data warehousing unit 2
PDF
Group Project 650 Report2
Marcus Matthews
Bbva workshop
Manufacturing and sales management system
Endeca information discovery for Oracle Receivables ( EBS)
Restaurent management system
Data Warehouse Project
Data warehousing unit 2
Group Project 650 Report2

Similar to Adbms final group project report (20)

PPTX
saloon management system for final year project submission
PDF
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
DOCX
How to design a database that include planning
PPTX
INVENTRY CONTROL SYSTEM WITH ONLINE TRANSACTIONS
PPTX
Supermarket management system
PPTX
Super market management system
PPT
Event management system
PPTX
Physical Design and Development
PPTX
Super Market Management System
PPTX
Supershop Management System presentation-1.pptx
PDF
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
DOCX
EJERCICIOS DE BENFORTAN
DOCX
Running Head PROJECT DELIVERABLE 31PROJECT DELIVERABLE 310.docx
PPTX
Product inventory system
PDF
322813487-ONLINE-JEWELLERY-SHOPPING-pdf.pdf
PPTX
PPTX
1585625790_SQL-SESSION1.pptx
PDF
Individual Project ---Yezhou Liang
PPTX
Online-Electronic-Store-PPT-Freedownload
DOCX
Database Management Systems Project Report
saloon management system for final year project submission
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
How to design a database that include planning
INVENTRY CONTROL SYSTEM WITH ONLINE TRANSACTIONS
Supermarket management system
Super market management system
Event management system
Physical Design and Development
Super Market Management System
Supershop Management System presentation-1.pptx
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
EJERCICIOS DE BENFORTAN
Running Head PROJECT DELIVERABLE 31PROJECT DELIVERABLE 310.docx
Product inventory system
322813487-ONLINE-JEWELLERY-SHOPPING-pdf.pdf
1585625790_SQL-SESSION1.pptx
Individual Project ---Yezhou Liang
Online-Electronic-Store-PPT-Freedownload
Database Management Systems Project Report
Ad

Recently uploaded (20)

PPT
12 Things That Make People Trust a Website Instantly
PPTX
ECO SAFE AI - SUSTAINABLE SAFE AND HOME HUB
PPTX
MY PRESENTATION66666666666666666666.pptx
PDF
BIOCHEM CH2 OVERVIEW OF MICROBIOLOGY.pdf
PDF
Buy Cash App Verified Accounts Instantly – Secure Crypto Deal.pdf
PDF
Exploring The Internet Of Things(IOT).ppt
PDF
📍 LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1 TERPOPULER DI INDONESIA ! 🌟
PPTX
COPD_Management_Exacerbation_Detailed_Placeholders.pptx
PDF
Lean-Manufacturing-Tools-Techniques-and-How-To-Use-Them.pdf
PPTX
Cyber Hygine IN organizations in MSME or
PDF
SlidesGDGoCxRAIS about Google Dialogflow and NotebookLM.pdf
PPTX
curriculumandpedagogyinearlychildhoodcurriculum-171021103104 - Copy.pptx
PPT
250152213-Excitation-SystemWERRT (1).ppt
PDF
simpleintnettestmetiaerl for the simple testint
PPTX
The-Importance-of-School-Sanitation.pptx
PPTX
t_and_OpenAI_Combined_two_pressentations
PPTX
AI_Cyberattack_Solutions AI AI AI AI .pptx
DOCX
Memecoinist Update: Best Meme Coins 2025, Trump Meme Coin Predictions, and th...
PPTX
module 1-Part 1.pptxdddddddddddddddddddddddddddddddddddd
PDF
Alethe Consulting Corporate Profile and Solution Aproach
12 Things That Make People Trust a Website Instantly
ECO SAFE AI - SUSTAINABLE SAFE AND HOME HUB
MY PRESENTATION66666666666666666666.pptx
BIOCHEM CH2 OVERVIEW OF MICROBIOLOGY.pdf
Buy Cash App Verified Accounts Instantly – Secure Crypto Deal.pdf
Exploring The Internet Of Things(IOT).ppt
📍 LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1 TERPOPULER DI INDONESIA ! 🌟
COPD_Management_Exacerbation_Detailed_Placeholders.pptx
Lean-Manufacturing-Tools-Techniques-and-How-To-Use-Them.pdf
Cyber Hygine IN organizations in MSME or
SlidesGDGoCxRAIS about Google Dialogflow and NotebookLM.pdf
curriculumandpedagogyinearlychildhoodcurriculum-171021103104 - Copy.pptx
250152213-Excitation-SystemWERRT (1).ppt
simpleintnettestmetiaerl for the simple testint
The-Importance-of-School-Sanitation.pptx
t_and_OpenAI_Combined_two_pressentations
AI_Cyberattack_Solutions AI AI AI AI .pptx
Memecoinist Update: Best Meme Coins 2025, Trump Meme Coin Predictions, and th...
module 1-Part 1.pptxdddddddddddddddddddddddddddddddddddd
Alethe Consulting Corporate Profile and Solution Aproach
Ad

Adbms final group project report

  • 1. ISM6218.001F16 ADVANCED DATABSE MANAGEMENT SYSTEMS FINAL GROUP PROJECT “E-COMMERCE SYSTEMS” Group Members Himank Vats (U87964346) Jijo Johny (U12605351) Tess Thomas (U66417789) Vrishali Giri (U40856469)
  • 2. CONTENTS Executive Summary Assumptions Part 1: Database Design Section 1.1: Data Integrity Section 1.2: Data Generation and Loading Section 1.3: Logical Database Design Section 1.3: Physical Database Design Part 2: Query Writing Section 2.1: SQL Queries Section 2.2: Database Programming Part 3: Performance Tuning Section 3.1: Indexing Section 3.2: Parallelism Part 4: Other Topics Section 4.1: DBA scripts Section 4.2: Database Security
  • 3. Executive Summary The use of internet technology for performing business transaction has grown exponentially over the decade or so. Almost all companies have migrated their transactions to e-commerce and remaining ones are on their way to do so! While B2B ecommerce platforms are making billions of revenues, B2C has become successful in establishing good relation with huge consumer followers nonetheless. The rise of online shopping have turned shoppers into promiscuous deal-hunters armed with mobile technology that allows them to shop whenever they want, however they want with whomever they want.
  • 4. The goal of this project is to build an E-Commerce system for online shoppers giving them flexibility to shop their favourite items without having to visit any shop. An e-commerce value chain represents a set of sequences which involves the interactions between online shoppers and e-commerce systems. We have focused on easy-to-understand user interface and query optimization in order to reduce the query processing time and give a user an hasslefree shopping experience. User role privileges are assigned in order to restrict the access between normal user and administrator. The system will generate up- to-date data based on number of items sold, availabe inventory and changes in prices. Below is the weights distribution according to the areas covered – Topic Area Description Points Database Design - Data Integrity - Data Generation and Loading - Logical Database Design - Physical Database Design 30 Query Writing - SQL Queries - Stored Procedure 25 Performance Tuning - Indexing - Parallelism 30 Other Topics - DBA scripts - Database security 15
  • 5. Assumptions 1. INV_Item_Number from the Inventory Item table should be present in the Order Item but not as foreign key. Because if it is declared as foreign key then the referential integrity will be violated when INV_Item_Number from the Inventory Item table is deleted. 2. Join ORDER_ITEM and INVENTORY_ITEM by outer join rather than a natural join so that order item with deleted product will be included. 3. Credit card table has the 16-digit credit number as primary key this it is unique. 4. Order table provides detail on products and how many were ordered for a given invoice. 5. Residential and shipping address are stored for customers. 6. Customers can have multiple credit cards tied to their account. It can be different names and billing address. 7. Invoice contains the order details, shipping information and address of customer.
  • 6. Part 1: Database Design Section 1.1 : Logical Database Design Below relational diagram depicts the interrelations between all the database tables. The se relationships are established by defining foreign key constraints.
  • 7. Section 1.2 : Physical Database Design We have generated below relational diagram using SQL developer modeler function.
  • 8. Section 1.3 : Data Integrity Below are the backend table creation queries which we have used. A. INVENTORY_ITEM CREATE TABLE "DB215"."INVENTORY_ITEM" ( "INV_ITEM" NUMBER(5,0) NOT NULL ENABLE, "INV_TITLE" VARCHAR2(6 BYTE) NOT NULL ENABLE, "INV_PRICE" NUMBER(5,0), "INV_TIMESTAMP" DATE, CONSTRAINT "INV_ITEM_PK" PRIMARY KEY ("INV_ITEM") );
  • 9. B. ORDER_ITEM CREATE TABLE "DB215"."ORDER_ITEM" ( "ORDER_ITEM" NUMBER(5,0) NOT NULL ENABLE, "INV_ITEM" NUMBER(5,0) NOT NULL ENABLE, "ORDER_ID" NUMBER NOT NULL ENABLE, "ORDER_QUANTITY" NUMBER(5,0), "ORDER_AMOUNT" NUMBER(5,0), "ORDER_TIMESTAMP" DATE, "SHIPPING_NUMBER" NUMBER(5,0), CONSTRAINT "ORDER_ITEM_PK" PRIMARY KEY ("ORDER_ITEM") CONSTRAINT "INV_ITEM_FK" FOREIGN KEY ("INV_ITEM") REFERENCES "DB215"."INVENTORY_ITEM" ("INV_ITEM") ENABLE, CONSTRAINT "ORDER_ID_FK" FOREIGN KEY ("ORDER_ID") REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE, CONSTRAINT "SHIPPING_NUMBER_FK1" FOREIGN KEY ("SHIPPING_NUMBER") REFERENCES "DB215"."SHIPPING" ("SHIPPING_NUMBER") ENABLE );
  • 10. C. INVOICE CREATE TABLE "DB215"."INVOICE" ( "INVOICE_NUMBER" NUMBER(5,0) NOT NULL ENABLE, "ORDER_ID" NUMBER NOT NULL ENABLE, "ADDRESS_NUMBER" NUMBER(5,0) NOT NULL ENABLE, "INVOICE_CREATION_DATE" DATE, "INVOICE_STATE" VARCHAR2(5 BYTE), "SHIPPING_NUMBER" NUMBER(5,0), CONSTRAINT "INVOICE_NUMBER_PK" PRIMARY KEY ("INVOICE_NUMBER") CONSTRAINT "ADDRESS_NUMBER_FK1" FOREIGN KEY ("ADDRESS_NUMBER") REFERENCES "DB215"."USER_INFO" ("ADDRESS_NUMBER") ENABLE, CONSTRAINT "ORDER_ID_FK2" FOREIGN KEY ("ORDER_ID") REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE, CONSTRAINT "SHIPPING_NUMBER_FK" FOREIGN KEY ("SHIPPING_NUMBER") REFERENCES "DB215"."SHIPPING" ("SHIPPING_NUMBER") ENABLE );
  • 11. D. USER_SESSION CREATE TABLE "DB215"."USER_SESSION" ( "SESSION_ID" NUMBER(5,0) NOT NULL ENABLE, "SESSION_CLICKS" NUMBER(5,0), "SESSION_TIME" DATE, "SESSION_IPADDRESS" VARCHAR2(100 BYTE), "CART_ID" NUMBER(5,0) NOT NULL ENABLE, "ACC_NUMBER" NUMBER(5,0), CONSTRAINT "USER_SESSION_PK" PRIMARY KEY ("SESSION_ID") CONSTRAINT "CART_ID_FK" FOREIGN KEY ("CART_ID") REFERENCES "DB215"."SHOPPING_CART" ("CART_ID") ENABLE, CONSTRAINT "ACC_NUMBER_FK2" FOREIGN KEY ("ACC_NUMBER") REFERENCES "DB215"."USER_ACCOUNT" ("ACC_NUMBER") ENABLE );
  • 12. E. USER_ACCOUNT CREATE TABLE "DB215"."USER_ACCOUNT" ( "ACC_NUMBER" NUMBER(5,0) NOT NULL ENABLE, "ACC_ID" VARCHAR2(50 BYTE) NOT NULL ENABLE, "ACC_PASSWORD" VARCHAR2(50 BYTE) NOT NULL ENABLE, "ACC_TIME" DATE, "ACC_VISITS" NUMBER(5,0), "ACC_N0_TRANS" NUMBER(5,0), "SESSION_ID" NUMBER(5,0) NOT NULL ENABLE, "USER_ROLE" VARCHAR2(15 BYTE), CONSTRAINT "USER_ACCOUNT_PK" PRIMARY KEY ("ACC_NUMBER") CONSTRAINT "SESSION_ID_FK" FOREIGN KEY ("SESSION_ID") REFERENCES "DB215"."USER_SESSION" ("SESSION_ID") ENABLE );
  • 13. F. CREDIT_CARD CREATE TABLE "DB215"."CREDIT_CARD" ( "CC_NUMBER" NUMBER(16,0) NOT NULL ENABLE, "CC_HOLDER_NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE, "CC_EXPIRY_DATE" DATE NOT NULL ENABLE, "ACC_NUMBER" NUMBER(6,0) NOT NULL ENABLE, "ADDRESS_NUMBER" NUMBER(6,0) NOT NULL ENABLE, CONSTRAINT "CREDIT_CARD_PK" PRIMARY KEY ("CC_NUMBER") CONSTRAINT "ACC_NUMBER_FK" FOREIGN KEY ("ACC_NUMBER") REFERENCES "DB215"."USER_ACCOUNT" ("ACC_NUMBER") ENABLE, CONSTRAINT "ADDRESS_NUMBER_FK" FOREIGN KEY ("ADDRESS_NUMBER") REFERENCES "DB215"."USER_INFO" ("ADDRESS_NUMBER") ENABLE );
  • 14. G. SHOPPING_CART CREATE TABLE "DB215"."SHOPPING_CART" ( "CART_ID" NUMBER(5,0) NOT NULL ENABLE, "INV_ITEM" NUMBER(5,0) NOT NULL ENABLE, "ACTIVE" VARCHAR2(20 BYTE) NOT NULL ENABLE, "TIME_STAMP" DATE, "QTY" NUMBER(2,0) NOT NULL ENABLE, "SESSION_ID" NUMBER(5,0), CONSTRAINT "SHOPPING_CART_PK" PRIMARY KEY ("CART_ID") CONSTRAINT "INVENTORY_ITEM_FK1" FOREIGN KEY ("INV_ITEM") REFERENCES "DB215"."INVENTORY_ITEM" ("INV_ITEM") ENABLE, CONSTRAINT "SESSION_ID_FK1" FOREIGN KEY ("SESSION_ID") REFERENCES "DB215"."USER_SESSION" ("SESSION_ID") ENABLE );
  • 15. H. ORDERS CREATE TABLE "DB215"."ORDERS" ( "ORDER_ID" NUMBER(5,0) NOT NULL ENABLE, "ORDER_DATE" DATE NOT NULL ENABLE, "TOTAL_AMT" NUMBER(5,0) NOT NULL ENABLE, "STATES" VARCHAR2(20 BYTE) NOT NULL ENABLE, "ACC_NUMBER" NUMBER(5,0), "SHIPPING_NUMBER" NUMBER(5,0), CONSTRAINT "ORDERS_PK" PRIMARY KEY ("ORDER_ID") CONSTRAINT "ACC_NUMBER_FK1" FOREIGN KEY ("ACC_NUMBER") REFERENCES "DB215"."USER_ACCOUNT" ("ACC_NUMBER") ENABLE, CONSTRAINT "SHIPPING_NUMBER_FK2" FOREIGN KEY ("SHIPPING_NUMBER") REFERENCES "DB215"."SHIPPING" ("SHIPPING_NUMBER") ENABLE );
  • 16. I. PAYMENT CREATE TABLE "DB215"."PAYMENT" ( "PAYMENT_ID" NUMBER(5,0) NOT NULL ENABLE, "ORDER_ID" NUMBER(5,0) NOT NULL ENABLE, "CC_NUMBER" NUMBER(16,0) NOT NULL ENABLE, "AMOUNT" NUMBER(5,0), "STATES" VARCHAR2(20 BYTE), "TIME_STAMP" DATE, CONSTRAINT "PAYMENT_PK" PRIMARY KEY ("PAYMENT_ID") CONSTRAINT "PAYMENT_ORDERS_FK1" FOREIGN KEY ("ORDER_ID") REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE, CONSTRAINT "PAYMENT_CREDIT_CARD_FK2" FOREIGN KEY ("CC_NUMBER") REFERENCES "DB215"."CREDIT_CARD" ("CC_NUMBER") ENABLE );
  • 17. J. USER_INFO CREATE TABLE "DB215"."USER_INFO" ( "ADDRESS_NUMBER" NUMBER(5,0) NOT NULL ENABLE, "FULLNAME" VARCHAR2(255 BYTE) NOT NULL ENABLE, "ADDRESS_LINE_1" VARCHAR2(255 BYTE) NOT NULL ENABLE, "ADDRESS_LINE_2" VARCHAR2(255 BYTE), "CITY" VARCHAR2(20 BYTE), "STATE" VARCHAR2(255 BYTE), "ZIP" NUMBER(5,0), "CC_NUMBER" NUMBER(16,0), CONSTRAINT "ADDRESS_NUMBER_PK" PRIMARY KEY ("ADDRESS_NUMBER") CONSTRAINT "CC_NUMBER_FK1" FOREIGN KEY ("CC_NUMBER") REFERENCES "DB215"."CREDIT_CARD" ("CC_NUMBER") ENABLE );
  • 18. K. SHIPPING CREATE TABLE "DB215"."SHIPPING" ( "SHIPPING_NUMBER" NUMBER(5,0) NOT NULL ENABLE, "ORDER_ID" NUMBER(5,0) NOT NULL ENABLE, "INVOICE_NUMBER" NUMBER(5,0) NOT NULL ENABLE, "SHIPPING_METHOD" VARCHAR2(255 BYTE) NOT NULL ENABLE, "SHIPPING_CHARGE" NUMBER(5,0) NOT NULL ENABLE, "ZIP" NUMBER(5,0), "SHIPPING_DATE" DATE NOT NULL ENABLE, "ADDRESS_NUMBER" NUMBER(5,0), CONSTRAINT "SHIPPING_NUMBER_PK" PRIMARY KEY ("SHIPPING_NUMBER") CONSTRAINT "SHIPPING_ORDER_ID_FK" FOREIGN KEY ("ORDER_ID") REFERENCES "DB215"."ORDERS" ("ORDER_ID") ENABLE, CONSTRAINT "SHIP_INVOICE_NUMBER_FK" FOREIGN KEY ("INVOICE_NUMBER") REFERENCES "DB215"."INVOICE" ("INVOICE_NUMBER") ENABLE, CONSTRAINT "ADDRESS_NUMBER_FK2" FOREIGN KEY ("ADDRESS_NUMBER") REFERENCES "DB215"."USER_INFO" ("ADDRESS_NUMBER") ENABLE );
  • 19. Section 1.4 : Data Generation and Loading A. Data Generation  The database design has 11 tables and the data is generate dfor all of them.  The user account table includes user_id, password, number of visits, total transaction amount.  Shipping information can be tracked form the shipping table.  Payment information can be tracked from the payment table.  The table user_session has 1000 rows rest all the tables 5000 rows each. The external data is created using: https://www.mockaroo.com http://www.yandataellan.com The user_session data has been created using the online generator as shown in the above snapshot. We can select the data type for each attribute value as specified in the data base design and download the csv format using the download button.
  • 20. Here the session_id is created as random number ranging from 80000 to 87000, session_clicks as number ranging from 1 to 10, session time ranging from 11/10/2015 to 11/10/2016 and session_ip_address as ip address v4. Using this we can generate 1000 rows. Below is the screenshot for creating tables with 5000 rows each.
  • 21. B. Data Loading All the required data is initially generated using the external data generator and is stored in the spreadsheets. Data is then imported to SQL developer using the import feature. Following are steps to import data to table: 1. Right click on the table and select “import data”. 2. Select the spread sheet containing data. 3. Select the format and spread sheet in the xls file (select headers). 4. Import method is insert. 5. Add all the columns required from file. 6. Map all the columns in spread sheet to columns in the database. 7. Verify parameters before import. 8. If the verification is successful, click finish to import the data. Below images shows the data import wizard and the way the data in imported into the INVENTORY_ITEM table.
  • 22. Right click on the table and select “import data” Data Import Wizard
  • 23. Data Preview in Data Import Wizard Choose Column in Data import Wizard
  • 24. Column Definition in Data import Wizard Column Definition for Inventory_Item Table in Data import Wizard
  • 25. Final Step in Data Import Wizard Data imported successful!
  • 26. Data in the Inventory_Item Table
  • 27. The number of record in each table is shown below: Table Number of Tuples INVENTORY_ITEM 5000 ORDER_ITEM 5000 INVOICE 5000 USER_SESSION 1000 USER_ACCOUNT 5000 CREDIT_CARD 5000 SHOPPING_CART 5000 ORDERS 5000 PAYMENT 5000 USER_INFO 5000 SHIPPING 5000
  • 28. Part 2: Query Writing Section 2.1: SQL Queries Query 1: Inventory item which is most ordered. SELECT INVENTORY_ITEM.INV_TITLE AS NAME, SUM(SHOPPING_CART.QTY) AS TOTAL_QUANTITY FROM SHOPPING_CART INNER JOIN INVENTORY_ITEM ON SHOPPING_CART.INV_ITEM = INVENTORY_ITEM.INV_ITEM GROUP BY INVENTORY_ITEM.INV_TITLE ORDER BY SUM(SHOPPING_CART.QTY)DESC;
  • 29. Query 2: Total shipments done in month of march. SELECT COUNT (SHIPPING_NUMBER) FROM SHIPPING WHERE SHIPPING_DATE BETWEEN '1/3/2016' AND '31/3/2016'; Query 3: Top selling items by Price. SELECT INVENTORY_ITEM.INV_TITLE AS NAME ,SUM(INVENTORY_ITEM.INV_PRICE) AS SALES, SUM(SHOPPING_CART.QTY) AS QUANTITY FROM SHOPPING_CART INNER JOIN INVENTORY_ITEM ON SHOPPING_CART.INV_ITEM = INVENTORY_ITEM.INV_ITEM GROUP BY INVENTORY_ITEM.INV_TITLE ORDER BY SUM(INVENTORY_ITEM.INV_PRICE)DESC;
  • 30. Query 4: Top Customers by Purchase Amount SELECT UA.ACC_NUMBER,UA.ACC_ID, SUM(O.TOTAL_AMT) AS PURCHASES FROM ORDERS O INNER JOIN USER_ACCOUNT UA ON O.ACC_NUMBER=UA.ACC_NUMBER GROUP BY UA.ACC_NUMBER,UA.ACC_ID ORDER BY SUM(O.TOTAL_AMT)DESC;
  • 31. Query 5: All the orders with rejected payment SELECT O.ORDER_ID, O.ORDER_DATE, O.TOTAL_AMT FROM ORDERS O JOIN PAYMENT P ON O.ORDER_ID=P.ORDER_ID WHERE P.STATES= 'FALSE' OR P.STATES='Failed' ORDER BY O.TOTAL_AMT;
  • 32. Query 6: Customers who haven’t placed any orders so far SELECT UA.ACC_NUMBER, UA.ACC_ID FROM ORDERS O RIGHT OUTER JOIN USER_ACCOUNT UA ON O.ACC_Number=UA.ACC_NUMBER WHERE O.ACC_NUMBER IS NULL GROUP BY UA.ACC_NUMBER, UA.ACC_ID ORDER BY UA.ACC_NUMBER ;
  • 33. Query 7: Users with more than 100 visits and have ordered high cost Items SELECT UA.ACC_NUMBER, UA.ACC_ID, II.INV_PRICE FROM USER_ACCOUNT UA JOIN USER_SESSION US ON UA.SESSION_ID = US.SESSION_ID JOIN SHOPPING_CART SC ON US.CART_ID = SC.CART_ID JOIN INVENTORY_ITEM II ON SC.INV_ITEM = II.INV_ITEM WHERE UA.ACC_VISITS > 100 ORDER BY II.INV_PRICE DESC;
  • 34. Section 2.2: Database Programming / Stored Procedures Stored procedures in DBMS are group of SQL statements integrated with a programming block, which can be named and stored in backend. Stored procedures can be shared and invoked by their name from any program. Below stored procedure is created to insert new items in inventory. The procedure performs check on USER_ROLE value from table USER_ACCOUNT before inserting record into the table If the user is ‘Admin’, only then the insertion is allowed. Procedure will come out of the loop if the role is other than ‘Admin’. In other words, every time Administrator tries to insert new record in INVENTORY_ITEM table, procedure ‘UpdateInventory’ is invoked.
  • 35. Part 3: Performance Tuning Section 3.1: Indexing Indexing is an essential part of performance tuning in database design. It helps improving the performance of query. We have used 2 types of indexing techniques while designing database - B-Tree and Bitmap Indexing. Before we begin explicitely creating indexes on tables, let us first take a look at current status of indexes in our database. The below query will extract the index structure from database schema. As we can see, currently we have only primary key index type which was assigned while creating tables. We will focus on tables those are densly populated and try to take a measurable stance to improve the query retrival time to some extent.
  • 36. B-Tree Index Let us execute the below complex query without creating any explicit index on tables. As we can see, the query execution time is 0.062 seconds and the cost of query is 21.
  • 37. We decided to create a B-Tree index on table ORDER_ITEM and on column ORDER_ID. Post index creation, we executed the same query again. We could see that this time the query took only 0.072 seconds to fetch data and query cost is reduced to 13.
  • 38. B-trees are the most widely used index type and a ubiquitous structure in computer science. Let us now create Bitmap index on comparatively densed table and observe the outcome.
  • 39. Bitmap Index Bitmap index structure uses bit-vector concept to indiacte which of the values occur in a row. Below query is executed without creating any index on tables used. As we can see, the query execution took 2.21 seconds with the cost of query as 31.
  • 40. We have created bitmap index on CREDIT_CARD table as below. As we can see, the query execution time reduced to 0.21 secinds whereas query cost has reduced to 21.
  • 42. Section 3.2: Parallelism Parallel processing is used to speed up datbase operations. We can apply parallelism to a single query to attain high speed. Parallelism is a natural fit for relational database environment. Step 1: Run the query select acc_number,acc_password,acc_visits,session_id from user_account; Step 2: Alter the table to use parallelism. ALTER TABLE user_Account PARALLEL (DEGREE 4); Step 3: Run the query again and look at the new execution plan.
  • 44. Part 4: Other Topics Section 4.1: DBA scripts DBA scripts are an excellent ways to query data dictionary in order to better understand what’s happening inside the database engine. Below are few types of scripts an administrator can use in his routine checks. A. Script 1 The below query will give the active sessions of the database. This is useful to monitor t he database and to ensure the security of database. SELECT NVL(s.username, '(oracle)') AS username, s.osuser, s.sid, p.spid, s.serial#, s.lockwait, s.status, s.service_name, s.module, s.program,s.machine, TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS login_time FROM v$session s, v$process p WHERE s.paddr = p.addr ORDER BY login_time;
  • 45. B. Script 2 The below script displays the free space per data file. This is useful for monitoring the datafiles when the storage is limited and this would help assimilate new datafiles. Select df.tablespace_name, df.file_name, df.bytes/1024/1024 total_size, nvl(fr.bytes/1024/1024,0) free_space, ((df.bytes-nvl(fr.bytes,0))/df.bytes)*100 pct_used from (select sum(bytes) bytes, file_id from dba_free_space group by file_id) fr, dba_data_files df where df.file_id = fr.file_id(+) order by 1, df.file_id;
  • 46. C. Script 3 It shows the background proccess that are running currently in database instance. SELECT * FROM v$bgprocess WHERE PADDR <> '00' ORDER BY DESCRIPTION;
  • 47. D. Script 4 This script displays the blocks and data size of users. SELECT OWNER, SUM(BLOCKS) TOTALBLOCKS, SUM(BYTES/(1024*1024)) TOTALMB FROM DBA_SEGMENTS GROUP BY OWNER ORDER BY totalblocks; E. Script 5 The below script displays the partitioning information. Partitioning helps in increasing the availability of mission critical databse. Critical tables or indexes are divided into partitions to reduce maintenance windows or recovery times or failures. SELECT p.table_name, p.partition_name,
  • 48. p.tablespace_name, p.initial_extent, p.next_extent, p.num_rows, p.avg_row_len, p.pct_increase FROM dba_tab_partitions p ORDER BY p.table_name, p.partition_name; F. Script 6 This query displays the count fro the number of indexes for a particular user. SELECT COUNT(INDEX_NAME) AS "INDEXES COUNT", TABLE_OWNER FROM DBA_INDEXES GROUP BY TABLE_OWNER HAVING TABLE_OWNER LIKE '%DB215%';
  • 49. G. Script 7 This script is to kill session. Before killing the session we have to identify the session that needs to be killed, if we kill the wrong session this can be very destructive. If a session belonging to a background process is killed this would cause an instance crash. To identify the session offending: SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND';
  • 51. Section 4.2: Database Security Data security will be applied to ensure that no unauthorized user can edit any critical data from the USER ACCOUNT, PAYMENT, INVENTORY ITEM, ORDER ITEM, ORDER DETAILS, SHIPPING, INVOICE, CREDIT CARD, SHOPPING CART, ADDRESS and USER SESSION tables. Roles will be assigned to all the players, security will be given to the users based on their roles. Sensitive and confidential data has to be encrypted. Encryption helps in preventing unauthorized access to both static as well as dynamic data even if the data is copied, backed up or stored offline. Data access is controlled rather than than database access. Data redaction strategies are another useful way of controlling access to data. It masks data at query time, so that the rules are aplied on the data being progressed. User authentication is a way to control database access in Oracle DBMS and other database systems. The three components are: users that must authenticate to access the database, system and object privileges to further control access and finally roles that can be used to organize groups of privileges. Privileges that are only necessary are given to other users. Without roles, granting privileges directly to individual and separate users would create a confusing and unwieldy network of access rights. A person with admin_role as ‘Administrator’ is only authorized to update all the information from all the tables.
  • 52. Granting authentication for roles: Grant All on USER ACCOUNT for ‘Administrator’; Grant All on PAYMENT for ‘Administrator’; Grant All on INVENTORY ITEM for ‘Administrator’; Grant All on ORDER ITEM for ‘Administrator’; Grant All on ORDER DETAILS for ‘Administrator’; Grant All on SHIPPING for ‘Administrator’; Grant All on INVOICE for ‘Administrator’; Grant All on CREDIT CARD for ‘Administrator’; Grant All on SHOPPING CART for ‘Administrator’; Grant All on ADDRESS for ‘Administrator’; Grant All on USER SESSION for ‘Administrator’.