IBuySPY Shopping Store. Data Model for IBuySPY Shopping Store

Preview:

DESCRIPTION

Sign In

Citation preview

IBuySPY Shopping Store

Data Model for IBuySPY Shopping Store

Sign In

CustomerLoginCREATE FUNCTION CustomerLogin( eml Customer.emailaddress%TYPE, pwd Customer.password%TYPE )RETURN number ISCID Customer.CustomerID%TYPEBEGIN

SELECT CustomerID INTO CIDFROM CustomersWHERE EmailAddress = emlAND Password = pwd;RETURN CID;

EXCEPTIONWHEN NO_DATA_FOUND THENRETURN 0;

END;/

Register

CustomerAddCREATE FUNCTION CustomerAdd (fname Customer.FullName%TYPE, eml Customer.Email%TYPE, pwd Customer.Password%TYPE)RETURN number IS CID Customer.CustomerID%TYPEBEGIN

CID := cus_seq.NEXTVAL;INSERT INTO Customers(CustomerID,FullName,EMailAddress,Password)VALUES (CID, fname, eml, pwd);RETURN CID;

END;/

Customer Also Bought

CustomerAlsoBought(1/2)CREATE Procedure CustomerAlsoBought @ProductID intAs

/* We want to take the top 5 products contained in the orders where someone has purchased the given

Product */SELECT TOP 5 OrderDetails.ProductID, Products.ModelName, SUM(OrderDetails.Quantity) as TotalNum

FROM OrderDetails INNER JOIN Products ON OrderDetails.ProductID =

Products.ProductID

CustomerAlsoBought(2/2)WHERE OrderID IN ( /* This inner query should retrieve all orders that

have contained the productID */ SELECT DISTINCT OrderID FROM OrderDetails WHERE ProductID = @ProductID)AND OrderDetails.ProductID != @ProductID

GROUP BY OrderDetails.ProductID, Products.ModelName

ORDER BY TotalNum DESC

GO

ProductSearchALTER Procedure ProductSearch @Search nvarchar(255)AS

SELECT ProductID,ModelName,ModelNumber,UnitCost,ProductImageFROM ProductsWHERE ModelNumber LIKE '%' + @Search + '%' OR ModelName LIKE '%' + @Search + '%' OR Description LIKE '%' + @Search + '%'

GO

Most Popular Items

ProductsMostPopularCREATE Procedure ProductsMostPopularAS

SELECT TOP 5 OrderDetails.ProductID, SUM(OrderDetails.Quantity) as TotalNum, Products.ModelName FROM OrderDetails INNER JOIN Products ON OrderDetails.ProductID =

Products.ProductIDGROUP BY OrderDetails.ProductID, Products.ModelName ORDER BY TotalNum DESCGO

Shopping Cart

ShoppingCartAddItem (1/2)

CREATE Procedure ShoppingCartAddItem @CartID nvarchar(50), @ProductID int, @Quantity intAs

DECLARE @CountItems int

SELECT @CountItems = Count(ProductID)FROM ShoppingCartWHERE ProductID = @ProductID AND CartID = @CartID

ShoppingCartAddItem (2/2)IF @CountItems > 0 /* There are items - update the

current quantity */

UPDATE ShoppingCart SET Quantity = (@Quantity + ShoppingCart.Quantity) WHERE ProductID = @ProductID AND CartID = @CartID

ELSE /* New entry for this Cart. Add a new record */ INSERT INTO ShoppingCart ( CartID, Quantity, ProductID) VALUES (@CartID, @Quantity, @ProductID)

GO

ShoppingCartRemoveAbandoned

CREATE Procedure ShoppingCartRemoveAbandonedAS

DELETE FROM ShoppingCart

WHERE DATEDIFF(dd, DateCreated, GetDate()) > 1

GO

OrdersAdd(1/3)CREATE Procedure OrdersAdd @CustomerID int, @CartID nvarchar(50), @OrderDate datetime, @ShipDate datetime, @OrderID int OUTPUTAS

BEGIN TRAN AddOrder

/* Create the Order header */INSERT INTO Orders(CustomerID, OrderDate, ShipDate)VALUES(@CustomerID, @OrderDate, @ShipDate)

SELECT @OrderID = @@Identity

OrdersAdd(2/3)/* Copy items from given shopping cart to OrdersDetail

table for given OrderID*/INSERT INTO OrderDetails(OrderID, ProductID, Quantity, UnitCost)

SELECT @OrderID,ShoppingCart.ProductID,

Quantity, Products.UnitCost

FROM ShoppingCart INNER JOIN Products ON ShoppingCart.ProductID =

Products.ProductID WHERE CartID = @CartID

OrdersAdd(3/3)

/* Removal of items from user's shopping cart will happen on the business layer*/

EXEC ShoppingCartEmpty @CartId

COMMIT TRAN AddOrder

GO