###BeginCaseStudy###
Case Study 1
Litware, Inc
Overview
You are a database administrator for a company named Litware, Inc. Litware is a book
publishing house.
Litware has a main office and a branch office.
You are designing the database infrastructure to support a new web-based application that is
being developed. The web application will be accessed at www.litwareinc.com. Both internal
employees and external partners will use the application.
You have an existing desktop application that uses a SQL Server 2008 database named
App1_DB. App1_DB will remain in production.
Requirements
Planned Changes
You plan to deploy a SQL Server 2014 instance that will contain two databases named
Database1 and Database2. All database files will be stored in a highly available SAN.
Database1 will contain two tables named Orders and OrderDetails. Databasel will also
contain a stored procedure named usp_UpdateOrderDetails. The stored procedure is used to
update order information. The stored procedure queries the Orders table twice each time the
procedure executes. The rows returned from the first query must be returned on the second
query unchanged along with any rows added to the table between the two read operations.
Database1 will contain several queries that access data in the Database2 tables.
Database2 will contain a table named Inventory. Inventory will contain over 100 GB of data.
The Inventory table will have two indexes: a clustered index on the primary key and a
nonclustered index. The column that is used as the primary key will use the identity property.
Database2 will contain a stored procedure named usp_UpdateInventory.
Usp_UpdateInventory will manipulate a table that contains a self-join that has an unlimited
number of hierarchies.
All data in Database2 is recreated each day and does not change until the next data creation
process.
Data from Database2 will be accessed periodically by an external application named
Application1. The data from Database2 will be sent to a database named App1_Db1 as soon
as changes occur to the data in Database2.
Litware plans to use offsite storage for all SQL Server 2014 backups.
Business Requirements
You have the following requirements:
• Costs for new licenses must be minimized.
• Private information that is accessed by Application must be stored in a secure format.
• Development effort must be minimized whenever possible.
• The storage requirements for databases must be minimized.
• System administrators must be able to run real-time reports on disk usage.
• The databases must be available if the SQL Server service fails.
• Database administrators must receive a detailed report that contains allocation errors
and data corruption.
• Application developers must be denied direct access to the database tables.
Applications must be denied direct access to the tables.
• You must encrypt the backup files to meet regulatory compliance requirements. The
encryption strategy must minimize changes to the databases and to the applications.
###EndCaseStudy###
You need to recommend a solution to improve the performance of usp.UpdateInventory. The
solution must minimize the amount of development effort.
What should you include in the recommendation?
A.
A table variable
B.
A common table expression
C.
A subquery
D.
A cursor
Explanation:
*Scenario: Database2 will contain a stored procedure named usp_UpdateInventory.
Usp_UpdateInventory will manipulate a table that contains a self-join that has an unlimited
number of hierarchies.
* A table variable can be very useful to store temporary data and return the data in the table
format.
* Example: The following example uses a self-join to find the products that are supplied by
more than one vendor.
Because this query involves a join of the ProductVendor table with itself, the ProductVendor
table appears in two roles. To distinguish these roles, you must give the ProductVendor
table two different aliases (pv1 and pv2) in the FROM clause. These aliases are used to
qualify the column names in the rest of the query. This is an example of the self-join
Transact-SQL statement:
USE AdventureWorks2008R2;
GO
SELECT DISTINCT pv1.ProductID, pv1.VendorID
FROM Purchasing.ProductVendor pv1
INNER JOIN Purchasing.ProductVendor pv2
ON pv1.ProductID = pv2.ProductID
AND pv1.VendorID <> pv2.VendorID
ORDER BY pv1.ProductID
Incorrect:
Not B: Using a CTE offers the advantages of improved readability and ease in maintenance
of complex queries. The query can be divided into separate, simple, logical building blocks.
These simple blocks can then be used to build more complex, interim CTEs until the final
result set is generated.
Usp_UpdateInventory will manipulate a table that contains a self-join that has an unlimited
number of hierarchies.
So I think answer should be B
Agree.Moreover table variable is not recommended for large datasets.
Agree CTE is the right answwer (Answer B)
CTE is correct
The question asks for:
You need to recommend a solution to improve the performance of usp.UpdateInventory.
so performance is asked. A recursive CTE is helpfull to see the hierarchy but is not suited for inserts/updates.
Therefore a CTE is good for a select but not for an update as in UpdateInventory.
So maybe I´m wrong, but I cannot see any improvement for performance of an update by using a CTE. (if complex joins are not needed)
In effect I would go with A.
“Database2 will contain a stored procedure named usp_UpdateInventory.”
“Usp_UpdateInventory will manipulate a table that contains a self-join that has an unlimited number of hierarchies.”
“All data in Database2 is recreated each day and does not change until the next data creation process.”
CTE will offer the best solution here, because there are actually no Inserts and Updates other than the daily data uploads.
Quiet blurry question, but I would go for “B. Common table expression”
As generally CTE yields a faster result in a recursive scenario.
In some scenarios, temp tables/table vars give better performance then CTE.
But table variable wouldn’t suit for large datasets (Inventory will contain over 100 GB).