In some cases, this will mean some developers and one or two DBAs, but larger organizations can afford a higher degree of specialization, so there will be developers who work exclusively within the data access layer of an application, database developers who specialize in writing T-SQL, architects who design databases from scratch based on business requirements, and so on. Stepping up the scale even further, some projects require multiple development teams, each working on a different aspect of the application and database, and each team performing of a collection of these specialized tasks. All these people will have to work together, mixing and matching their bits and pieces of work, to arrive at a unified delivery: an application and its database.
While performing this feat of legerdemain, they'll also have to deal with the fact that the different teams may be at different points in the development life cycle, and that each team may have dependencies on another. These various differences and dependencies will lead to conflict as the teams attempt to work on a single shared system.
Before you throw up your hands and declare this a lost cause, understand that you're not alone. Fortunately, these problems are not unique. There are a number of tools and techniques that can help you write clear, well-documented, reusable database code, then manage that code so that multiple versions of it can be deployed cleanly and reliably to any number of systems.
This book shows how to use of mixture of home-grown scripts, native SQL Server tools, and tools from the Red Gate SQL Toolbelt (such as SQL Compare, SQL Source Control, SQL Prompt, and so on), to successfully develop database applications in a team environment, and make database development as similar as possible to "normal" development.
It shows how to solve many of the problems that the team will face when writing, documenting, and testing database code in a team environment, including all the areas below.
* Writing readable code.
* Documenting code.
* Source control and change management.
* Deploying code between environments.
* Unit testing.
* Reusing code.
* Searching and refactoring your code base.