A Basic Walkthrough Of SQL Schema

Introduction

 
The first time I heard and noticed schema back in 2005, I completely ignored it because I'm comfortable using dbo as my default schema. But, as time went by, I decided to understand and implement it in my database projects until I became more comfortable using it. Thus, I'll be sharing some of my views about the SQL Server's schema.
 
Ok, then let's get started.
 

What is a Database Schema?

  • Database schema acts as a container of objects such as tables, views, stored procedures, etc.
  • Suppose you are familiar with a namespace in other programming languages; it is similar to a schema. Moreover, to prefix to the object name, a schema is used. For example, suppose you have a table named Employee in a schema of HR. Then the schema-qualified object name is HR.Employee.

Why do we need Schemas?

 
Most of us are most likely familiar with the default and built-in schema, the dbo. Once you have created an object without a schema, dbo becomes the object's default schema. This practice is considered a bad one from a manageability perspective. That's why it is accepted that to logically separate objects into groups or schemas.
 

What are the Built-in Schemas in SQL Server?

 
By default, SQL Server provides several schemas that exist in a newly created database, such as dbo, sys, guest, and information_schema schemas, to name a few. By default, the newly created object uses the dbo schema, while other system objects use the sys and information_schema schemas.
 
Let us see how we can list the schemas of a database.
  1. SELECT   
  2.     schema_id [Id],  
  3.     name [Schema Name]  
  4. FROM SYS.SCHEMAS  
  5. ORDER BY name  
Output
 
 

How to Create a Schema?

 
The CREATE SCHEMA statement is straightforward and, of course, creates a new schema in your selected database.
 
Let us see the example below.
  1. --CREATE A NEW SCHEMA   
  2. CREATE SCHEMA MY_SCHEMA;   
  3. GO  
Output
 
 
Let's create a new schema that includes the AUTHORIZATION keyword.
  1. CREATE LOGIN JIN_USER  
  2.     WITH PASSWORD = '123456';  
  3. GO  
  4.   
  5. CREATE USER JIN_USER FOR LOGIN JIN_USER;  
  6.   
  7. CREATE SCHEMA MY_SCHEMA2 AUTHORIZATION JIN_USER;  
Output
 
 

How to Create Objects Under a Schema?

 
Once you have created a schema within your database, you can now create objects for that schema. Just like in our example, we have created a new schema named MY_SCHEMA2. And, now will show how to create a table under that schema.
 
Let us see the example below.
  1. USE [EMPLOYEE_DEPARTMENT_DB];  
  2.   
  3. CREATE TABLE [MY_SCHEMA2].ORDERS  
  4. (  
  5.     OrderId int NOT NULL  
  6. );  
  7. GO  
Output
 
 

How to Alter Schema?

 
When it comes to altering a schema, the first thing that comes to mind is renaming the schema-name. However, you can't directly rename a schema, but you can move an object's schema to a new one using the ALTER SCHEMA statement.
 
Let us see the example below.
  1. USE [EMPLOYEE_DEPARTMENT_DB];  
  2. GO   
  3.   
  4. --create a new schema  
  5. CREATE SCHEMA [MY_SCHEMA_3] AUTHORIZATION JIN_USER;  
  6. GO  
  7.   
  8. -- transfer the old schema to the newly created one  
  9. -- see the examples below.   
  10.   
  11. ALTER SCHEMA [MY_SCHEMA_3] TRANSFER  [MY_SCHEMA2].CUSTOMERS;  
  12. GO  
  13.   
  14. ALTER SCHEMA [MY_SCHEMA_3] TRANSFER [MY_SCHEMA2].ORDERS;  
  15. GO  
Output
 
 

How to Drop Schema?

 
The DROP SCHEMA statement allows you to delete a schema from a database. However, one thing needs to be aware of; the schema must not use any objects like a table to execute this statement successfully.
 
Let us first see dropping a schema that doesn't have any references to any objects.
  1. USE [EMPLOYEE_DEPARTMENT_DB];  
  2. GO   
  3.   
  4. CREATE SCHEMA MY_SCHEMA_WITHOUT_REFERENCES;   
  5. GO  
  6.   
  7. DROP SCHEMA MY_SCHEMA_WITHOUT_REFERENCES;  
  8. GO   

Let us see how to drop a schema that has a reference to a table object.

When we look at the screenshot below as our example, we can see two tables under the MY_SCHEMA_3 schema.
 
  
Once we have decided to drop the MY_SCHEMA_3 schema, we'll eventually get an error because we need to remove the references first.
 
Let us see it first before we release the references.
  1. USE [EMPLOYEE_DEPARTMENT_DB];  
  2. GO  
  3.   
  4. DROP SCHEMA [MY_SCHEMA_3];  
  5. GO   
Output
 
 
To get rid of the error and execute it successfully we need to remove the referenced object, the CUSTOMERS, and ORDERS table to drop the schema altogether.
 
See the updated script below.
  1. USE [EMPLOYEE_DEPARTMENT_DB];  
  2. GO  
  3.   
  4. DROP TABLE [MY_SCHEMA_3].[ORDERS];  
  5. DROP TABLE [MY_SCHEMA_3].[CUSTOMERS];  
  6.   
  7. DROP SCHEMA [MY_SCHEMA_3];  
  8. GO   
As you can see, we need to drop the objects first, even before getting rid of the schema. In this case, we have dropped the tables ORDERS and CUSTOMERS.
 
And finally, we have dropped the related schema, which in this case is MY_SCHEMA_3.
 

Summary

 
In this post, we have learned the basics of SQL Schema. Moreover, we have tackled a database schema to create, alter, and drop schemas.
 
I hope you have enjoyed this article, as I have enjoyed writing it. This article was originally written and posted here.
 
Stay tuned for more. Many thanks, until next time, happy programming!