Data Partitioning and Relational Model Implementation
Implementation of Data Partitioning through Range
Step 1: Create a Database
mysql>create database mca;
mysql>use mca
Step 2: Create a Partitioned Table
mysql> CREATE TABLE tr (id INT, name VARCHAR(50), purchased DATE)
PARTITION BY RANGE (YEAR(purchased)) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005),
PARTITION p4 VALUES LESS THAN (2010),
PARTITION p5 VALUES LESS THAN (2015)
);
Step 3: Insert Data
mysql> INSERT INTO tr VALUES
(1, 'desk organiser', '2003-10-15'),
(2, 'alarm clock', '1997-11-05'),
(3, 'chair', '2009-03-10'),
(4, 'bookcase', '1989-01-10'),
(5, 'exercise bike', '2014-05-09'),
(6, 'sofa', '1987-06-05'),
(7, 'espresso maker', '2011-11-22'),
(8, 'aquarium', '1992-08-04'),
(9, 'study desk', '2006-09-16'),
(10, 'lava lamp', '1998-12-25');
Step 4: Check Inserted Data
mysql> select * from tr;
Step 5: Query Specific Partitions
mysql> SELECT * FROM tr PARTITION (p2);
mysql> SELECT * FROM tr PARTITION (p5);
mysql> SELECT * FROM tr PARTITION (p4);
Step 6: View Partition Information
mysql> SELECT PARTITION_NAME, TABLE_ROWS FROM
INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='tr';
Step 7: Drop a Partition
MySQL> ALTER TABLE tr TRUNCATE PARTITION p0;
Mysql> SELECT PARTITION_NAME, TABLE_ROWS FROM
INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='tr';
Implementation of Data Partitioning through List Partition
Step 1: Create a List Partitioned Table
Mysql> CREATE TABLE Stores (
cust_name VARCHAR(40),
bill_no VARCHAR(20) NOT NULL,
store_id INT PRIMARY KEY NOT NULL,
bill_date DATE NOT NULL,
amount DECIMAL(8,2) NOT NULL
)
PARTITION BY LIST(store_id) (
PARTITION pEast VALUES IN (101, 103, 105),
PARTITION pWest VALUES IN (102, 104, 106),
PARTITION pNorth VALUES IN (107, 109, 111),
PARTITION pSouth VALUES IN (108, 110, 112));
Implementation of Abstract Data Type & Reference (Relational Model)
Creating Tables
CREATE TABLE Customer_reltab (
CustNo NUMBER NOT NULL,
CustName VARCHAR2(200) NOT NULL,
Street VARCHAR2(200) NOT NULL,
City VARCHAR2(200) NOT NULL,
State CHAR (2) NOT NULL,
Zip VARCHAR2(20) NOT NULL,
Phone1 VARCHAR2(20),
Phone2 VARCHAR2(20),
Phone3 VARCHAR2(20),
PRIMARY KEY (CustNo));
SQL>desc Customer_reltab;
CREATE TABLE PurchaseOrder_reltab (
PONo NUMBER, /* purchase order no */
Custno NUMBER references Customer_reltab, /* Foreign
KEY referencing customer */
OrderDate DATE, /* date of order */
ShipDate DATE, /* date to be shipped */
ToStreet VARCHAR2(200), /* shipto address */
ToCity VARCHAR2(200),
ToState CHAR (2),
ToZip VARCHAR2(20),
PRIMARY KEY(PONo));
CREATE TABLE Stock_reltab (
StockNo NUMBER PRIMARY KEY,
Price NUMBER,
TaxRate NUMBER);
CREATE TABLE LineItems_reltab (
LineItemNo NUMBER,
PONo NUMBER REFERENCES PurchaseOrder_reltab,
StockNo NUMBER REFERENCES Stock_reltab,
Quantity NUMBER,
Discount NUMBER,
PRIMARY KEY (PONo, LineItemNo));
Inserting Values
1. Inserting into Stock_reltab
INSERT INTO Stock_reltab VALUES (1004, 6750.00, 2);
INSERT INTO Stock_reltab VALUES (1011, 4500.23, 2);
INSERT INTO Stock_reltab VALUES (1534, 2234.00, 2);
INSERT INTO Stock_reltab VALUES (1535, 3456.23, 2);
2. Inserting into Customer_reltab
INSERT INTO Customer_reltab VALUES (1, 'Jean Nance', '2 Avocet Drive','Redwood Shores', 'CA', '95054','415-555-1212', NULL, NULL);
INSERT INTO Customer_reltab VALUES (2, 'John Nike', '323 College Drive','Edison', 'NJ', '08820','609-555-1212', '201-555-1212', NULL);
3. Inserting into PurchaseOrder_reltab
INSERT INTO PurchaseOrder_reltab VALUES (1001, 1, SYSDATE, '10-MAY-1997', NULL, NULL, NULL, NULL);
INSERT INTO PurchaseOrder_reltab VALUES (2001, 2, SYSDATE, '20-MAY-1997','55 Madison Ave', 'Madison', 'WI', '53715');
4. Inserting into LineItems_reltab
INSERT INTO LineItems_reltab VALUES (01, 1001, 1534, 12, 0);
INSERT INTO LineItems_reltab VALUES (02, 1001, 1535, 10, 10);
INSERT INTO LineItems_reltab VALUES (01, 2001, 1004, 1, 0);
INSERT INTO LineItems_reltab VALUES (02, 2001, 1011, 2, 1);
Querying Data
Get Customer and Order Details for Purchase Order 1001
SELECT C.CustNo, C.CustName, C.Street, C.City, C.State, C.Zip, C.phone1, C.phone2, C.phone3, P.PONo, P.OrderDate, L.StockNo, L.LineItemNo, L.Quantity, L.Discount
FROM Customer_reltab C, PurchaseOrder_reltab P, LineItems_reltab L
WHERE C.CustNo = P.CustNo
AND P.PONo = L.PONo
AND P.PONo = 1001;
Get Total Value of Purchase Orders
SELECT P.PONo, SUM(S.Price * L.Quantity)
FROM PurchaseOrder_reltab P, LineItems_reltab L, Stock_reltab S
WHERE P.PONo = L.PONo
AND L.StockNo = S.StockNo
GROUP BY P.PONo;
Get Purchase Order and Line Item Data for Stock Item 1004
SELECT P.PONo, P.CustNo, L.StockNo, L.LineItemNo, L.Quantity, L.Discount
FROM PurchaseOrder_reltab P, LineItems_reltab L
WHERE P.PONo = L.PONo
AND L.StockNo = 1004;
Updating Data
Update Quantity for a Specific Line Item
UPDATE LineItems_reltab
SET Quantity = 20
WHERE PONo = 1001
AND StockNo = 1534;
Deleting Data
Delete Line Items and Purchase Order
DELETE FROM LineItems_reltab WHERE PONo = 1001;
DELETE FROM PurchaseOrder_reltab WHERE PONo = 1001;