You are on page 1of 13

REQUIREMENTS

1. Create a database, ShopHere.

2. Create the tables as per the relationship diagram, ensuring minimum disk space utilization.

3. Perform validations on the tables as per the following guidelines.

4. Create appropriate relationships between the tables.

5. Create the appropriate indexes.

6. Simplify the following task:

− Calculation of the total cost for a particular order.


− Calculation of the total of all the orders placed by a particular employee in a
particular month.

1
CREATE DATABASE

Create a database, ShopHere.


CREATE DATABASE Shope Here

ON PRIMARY

NAME= ShopeHere _Data,

FILENAME='C:\Program Files\Microsoft SQL

Server\MSSQL.1\MSSQL\DATA\ ShopeHere _Data.mdf',

MAXSIZE=50mb,SIZE=20mb,

FILEGROWTH=2mb

LOG ON

NAME= ShopeHere_Log,

FILENAME='C:\Program Files\Microsoft SQL

Server\MSSQL.1\MSSQL\DATA\ ShopeHere _Log.ldf',

MAXSIZE=10mb,SIZE=4mb,

FILEGROWTH =2kb

2
CREATE SCHEMAS

CREATE SCHEMA Items

CREATE SCHEMA Supplier

CREATE SCHEMA HumanResources

CREATE SCHEMA Transactions

3
CREATE TABLES

TABLE Items.ItemDetails
CREATE TABLE Items.ItemDetails
(
ItemID INT PRIMARY KEY IDENTITY(1,1),

ItemName NVARCHAR (50) NOT NULL,

ItemDecription NVARCHAR (50) NOT NULL,

UnitPrice MONEY CHECK (UnitPrice>0),

QantityInHand INT CHECK (QantityInHand>0),

ReorderLevel NVARCHAR (50) CHECK (ReorderLevel>0),

ReorderQuantity INT CHECK (ReorderQuantity>0),

CategoryID INT ,

SupplierID INT

ALTER TABLE Items.ItemDetails

ADD

CONSTRAINT [FK_Items.ItemDetails_Items.ProductCategory] FOREIGN KEY

[CategoryID]

) REFERENCES Items.ProductCategory

ALTER TABLE Items.ItemDetails

ADD

CONSTRAINT [FK_Items.ItemDetails_Supplier.SupplierDetails] FOREIGN KEY

SupplierID
) REFERENCES Supplier.SupplierDetails

4
TABLE Items.ProductCategory
CREATE TABLE Items.ProductCategory

Catego ryID INT PRIMARY KEY IDENTITY,

Catego ryName NVARCHAR (200) NOT NULL CHECK

(CategoryName IN ('HouseHold','Sports','Accessories','Clothing')),

Catego ryDescription NVARCHAR (1000) NOT NULL

TALBLE Supplier.SupplierDetails
CREATE TABLE Supplier.SupplierDetails

SupplierID INT PRIMARY KEY IDENTITY (001,1),

FirstName NVARCHAR (100) NOT NULL,

LastName NVARCHAR (100) NOT NULL,

Address NVARCHAR (1000) NOT NULL,

Phone VARCHAR(20) NOT NULL CHECK ([Phone]LIKE

('[0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]')),

Country NVARCHAR (100) NOT NULL

TABLE HumanResources.Employee
CREATE TABLE HumanResources.Employee

EmployeeID INT PRIMARY KEY IDENTITY(01,1),

FirstName NVARCHAR (100) NOT NULL,

LastName NVARCHAR (100) NOT NULL,

City NVARCHAR (100) NOT NULL,

Phone VARCHAR(30) NOT NULL CHECK ([Phone] LIKE

('[0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]'))

5
)

TABLE Transactions.OrderDetails
CREATE TABLE Transactions.OrderDetails

PurchaseOrderID INT PRIMARY KEY IDENTITY (1,1),

EmployeeID INT NOT NULL,

OrderDate DATETIME CHECK ([OrderDate] < GETDATE())

DEFAULT GETDATE(),

RecievingDate DATETIME NULL ,

ItemsID INT,

QuantityOrder INT CHECK ([QuantityOrder]>0),

QuantityReceived INT NULL CHECK ([QuantityReceived]>0),

UnitPrice MONEY CHECK ([UnitPrice]>0),

ShipMethod NVARCHAR(200) ,

OrderStatus NVARCHAR(1000) CHECK (OrderStatus IN ('InTransit',

'Received','Cancelled'))

ALTER TABLE Transactions.OrderDetails

ADD

CONSTRAINT [FK_Transactions.OrderDetails_Items.ItemDetails]

FOREIGN KEY

(ItemsID) REFERENCES Items.ItemDetails

ALTER TABLE Transactions.OrderDetails

ADD

CONSTRAINT [FK_Transactions.OrderDetails_HumanResources.Employee]

FOREIGN KEY

(EmployeeID) REFERENCES HumanResources.Employee

6
PERFORM VALIDATION ON TABLES

TRIGGERS Quantity received can not greater than QuantityOrdered


CREATE TRIGGER TRG_Checkquatity

ON Transactions.OrderDetails

FOR INSERT,UPDATE

AS

BEGIN

DECLARE @QuantityOrder INT

DECLARE @QuantityReceived INT

SELECT @QuantityOrder=QuantityOrder,@QuantityReceived=QuantityReceived

FROM INSERTED

IF @QuantityReceived>=@QuantityOrder

BEGIN

PRINT 'QuantityReceived phai nho hon hoac bang QuantityOrder'

ROLLBACK TRAN

END

END

7
QuantityReceived should be added to QuantityInHand in the Items table
CREATE TRIGGER TRG_addquantity

ON Transactions.OrderDetails

FOR INSERT,UPDATE

AS

BEGIN

DECLARE @QuantityReceived INT

DECLARE @QantityInHand INT

DECLARE @add INT

DECLARE @ItemID INT

SELECT @QuantityReceived=QuantityReceived,

@QantityInHand=QantityInHand,

@ItemID=ItemID

FROM Items.ItemDetails a JOIN inserted b ON a.ItemID=b.ItemsID

SET @add=@QuantityReceived+@QantityInHand

UPDATE Items.ItemDetails

SET QantityInHand=@add

WHERE ItemID=@ItemID

END

8
RecievingDate should be greater than OrderDate
CREATE TRIGGER TRG_checkdate

ON Transactions.OrderDetails

FOR INSERT,UPDATE

AS

BEGIN

DECLARE @RecievingDate DATETIME

DECLARE @OrderDate DATETIME

SELECT @RecievingDate=RecievingDate,

@OrderDate=OrderDate

FROM inserted

IF @RecievingDate<=@OrderDate

BEGIN

PRINT 'RecievingDate phai lon hon bang OrderDate'

ROLLBACK TRAN

END

END

9
DATABASE DIAGRAM

10
CREATE INDEX

1. Extract the Order Details for all the Purchase Orders in the current
month:

CREATE NONCLUSTERED INDEX Idx_OrderDate


ON Transactions.OrderDetails (OrderDate)

2. Extract the details of all the Orders placed more than two years
back:

CREATE NONCLUSTERED INDEX idx_ReceivingDate


ON Transactions.OrderDetails(ReceivingDate)

3. Extract the details of the TOP FIVE Suppliers to whom the aximum
number of order have been placed in the current month:

CREATE NONCLUSTERED INDEX idx_QuantityOrders


ON Transactions.OrderDetails(QuantityOrdered)

11
TASK SIMPLIFYING

Calculation of the total cost for a particular order


CREATE PROC Totalcost @PurchaseOrderID int

AS

BEGIN

DECLARE @QuantityReceived INT

DECLARE @UnitPrice MONEY

DECLARE @Totalcost MONEY

SELECT@PurchaseOrderID=PurchaseOrderID,

@QuantityReceived=QuantityReceived,

@UnitPrice=UnitPrice

FROM Transactions.OrderDetails

WHERE PurchaseOrderID=@PurchaseOrderID

SET @Totalcost=@UnitPrice*@QuantityReceived

PRINT @Totalcost

END

12
Calculation of the total of all the orders placed by a particular employee in
a particular month
CREATE PROC T OLTALORDER @EMPLOYEE ID INT,@MONTH INT

AS

BEGIN

SELECT @E MPLOYEE ID=EMPLOYEEID,@M ONTH=MONTH(ORDER DATE)

FROM T RANSACTIONS.ORDER DETAILS

SELECT COUNT (QUANTITYORDER )

FROM TRANSACTIONS .ORDERDETAILS

WHERE E MPLOYEE ID=@E MPLOYEE ID AND MONTH (ORDERDATE )=@M ONTH

END

13

You might also like