sql >> Base de Datos >  >> RDS >> Sqlserver

Uso de esquemas de base de datos en SQL Server

Este artículo explicará qué son los esquemas de base de datos, sus ventajas y cómo crear y usar esquemas en SQL Server.

En un sistema de administración de bases de datos relacionales como SQL Server, la base de datos contiene varios objetos. Estos pueden ser tablas, procedimientos almacenados, vistas y funciones. En una base de datos, el esquema se refiere a la colección lógica de objetos de la base de datos. Puede usar esquemas para segregar objetos según la aplicación, los derechos de acceso y la seguridad.

Esquemas de SQL Server

SQL Server proporciona los siguientes esquemas lógicos integrados:

  • dbo
  • sistema
  • invitado
  • INFORMACIÓN_ESQUEMA

Cada esquema de SQL Server debe tener un usuario de base de datos como propietario del esquema. El propietario del esquema tiene control total sobre el esquema. También puede cambiar el propietario del esquema o mover objetos de un esquema a otro.

Los esquemas de SQL Server brindan los siguientes beneficios:

  • Proporciona más flexibilidad y control para administrar objetos de base de datos en grupos lógicos
  • Le permite mover objetos rápidamente entre diferentes esquemas
  • Le permite administrar la seguridad de los objetos a nivel de esquema
  • Permite a los usuarios administrar grupos lógicos de objetos dentro de una base de datos
  • Permite a los usuarios transferir la propiedad entre varios esquemas

Suponga que para la base de datos de su organización desea agrupar objetos en función de los departamentos. Por ejemplo, las tablas y los procedimientos almacenados para el departamento de recursos humanos deben agruparse lógicamente en el esquema [HR]. Del mismo modo, las tablas del departamento de finanzas deben estar en el esquema [Fin]. Cada esquema (grupo lógico) contiene objetos de SQL Server como tablas, procedimientos almacenados, vistas, funciones, índices, tipos y sinónimos.

Nota:El esquema es una entidad en el ámbito de la base de datos. Puede tener el mismo esquema en diferentes bases de datos de una instancia de SQL Server.

De forma predeterminada, SQL Server utiliza el esquema [dbo] para todos los objetos de una base de datos. Podemos consultar SCHEMA_NAME() para obtener el esquema predeterminado para el usuario conectado.

SELECT SCHEMA_NAME() AS defaultschema;

Lista de todos los esquemas de base de datos en la base de datos actual

Puede obtener una lista de los esquemas mediante una consulta SSMS o T-SQL. Para hacer esto en SSMS, debe conectarse a la instancia de SQL, expandir la base de datos de SQL y ver los esquemas en la carpeta de seguridad.

Alternativamente, podría usar sys.schemas para obtener una lista de esquemas de bases de datos y sus respectivos propietarios.

SELECT s.name AS schema_name,
u.name AS schema_owner
FROM sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY s.name;

Crear un esquema de SQL Server mediante CREATE SCHEMA

Para crear un nuevo esquema de SQL Server, usamos la declaración CREATE SCHEMA t-SQL. Su sintaxis se muestra a continuación.

CREATE SCHEMA <schema_name>
AUTHORIZATION <owner_name>
  • Schema_name:Este es el esquema que queremos crear
  • Autorización:este es el nombre del propietario del esquema

El script para crear esquemas [HR], [Admin] y [Fin] con el propietario del esquema [dbo] se muestra a continuación.

CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

Puede actualizar la base de datos y ver el esquema recién creado como se muestra a continuación.

Crear una nueva tabla dentro de un esquema

Para crear objetos como una tabla, debemos especificar el nombre del esquema en el que se creará el objeto. Por ejemplo, el siguiente script crea [TableA] en diferentes esquemas [HR], [Admin] y [Fin].

CREATE TABLE HR.TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
CREATE TABLE [Admin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
CREATE TABLE [Fin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

Puede unir las tablas del sistema sys.tables y sys.schema para mostrar el nombre de la tabla con sus esquemas. Por ejemplo, la siguiente consulta devuelve [TableA] con su esquema.

SELECT
s.name AS SchemaName,
t.name AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE t.name ='TableA'

Si no especifica un esquema al crear el objeto, SQL Server usa el esquema predeterminado. Por ejemplo, el siguiente script crea una TableA en el esquema dbo.

CREATE TABLE TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

Nota:Puede crear una tabla con un nombre similar en el esquema diferente de una base de datos.

Debe especificar el esquema de la tabla para obtener datos del esquema correcto. Por ejemplo, como se muestra arriba, tenemos [TableA] en todos los esquemas. Por lo tanto, si selecciona registros directamente sin especificar el esquema, busca un objeto en el esquema DBO predeterminado. Por lo tanto, siempre especifique el nombre del esquema como SELECT * FROM HR.TableA para recuperar datos o realizar cualquier operación.

Crear un procedimiento almacenado dentro de un esquema

De manera similar, puede crear objetos como procedimientos almacenados en esquemas específicos. Por ejemplo, la siguiente secuencia de comandos crea un SP en el esquema de recursos humanos.

CREATE PROCEDURE HR.GetEmpData
AS
BEGIN
SELECT * FROM [HR].[TableA]
END

Transferir el objeto a un esquema diferente

En algún momento, es posible que obtenga un requisito para mover el objeto a un esquema específico. Por ejemplo, supongamos que creó un nuevo esquema [Org] y desea que su [HR].[TableA] pase del esquema [HR] al esquema [Org].

En este caso, puede usar el comando Alter SCHEMA con la siguiente sintaxis.

ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

El siguiente script transfiere el objeto [HR].[TableA] al esquema [Org].

CREATE SCHEMA [ORG]
GO
ALTER SCHEMA ORG TRANSFER HR.TableA

Ahora, transfiramos el procedimiento almacenado [HR].[GetEmpData] al esquema [Org].

ALTER SCHEMA ORG TRANSFER HR.GetEmpData

Una vez que ejecuta el script, muestra el procedimiento almacenado en el esquema [Org].

Sin embargo, dentro del procedimiento almacenado, el código sigue haciendo referencia al esquema [HR].[TableA].

Por lo tanto, no debe mover vistas, funciones o procedimientos almacenados mediante la función ALTER SCHEMA, ya que podría tener referencias para los objetos en la definición. En su lugar, puede descartar, crear o modificar el procedimiento como se muestra a continuación.

Descartar un esquema

Puede colocar un esquema en una base de datos de SQL Server, pero el esquema no debe contener ningún objeto. Por ejemplo, si trato de eliminar el esquema [Org], aparece un error que indica que no puede eliminar el esquema porque el objeto GetEmpData hace referencia a él.

Por lo tanto, puede transferir el objeto a un esquema diferente o descartar los objetos primero. Por ejemplo, eliminemos los procedimientos almacenados GetEmpData y luego intentemos eliminar el esquema. Nuevamente recibimos un error porque tenemos [TableA] en el esquema [Org].

Una vez que eliminamos o movimos todos los objetos en el esquema de la base de datos, puede eliminar el esquema.

Nota:no puede descartar esquemas del sistema como dbo, information_schema, sys.

Ventajas de usar esquemas de bases de datos

  • Los esquemas de base de datos nos brindan la flexibilidad para crear grupos de objetos lógicos en una base de datos. Si varios equipos trabajan con la misma base de datos, podemos diseñar varios esquemas para segregar sus objetos.
  • Los esquemas de base de datos ayudan a los profesionales de bases de datos a administrar el acceso, ya que puede controlar el acceso a los usuarios para sus respectivos esquemas en lugar de proporcionar acceso a la base de datos en su totalidad.
  • Puede administrar bases de datos de manera más eficiente porque permite que los mismos objetos en múltiples esquemas aparezcan como un grupo lógico diferente.
  • Puede mover objetos rápidamente dentro de diferentes esquemas.
  • La propiedad del esquema se puede asignar con cualquier principal o rol de la base de datos y la propiedad también se puede transferir.
  • Proporciona una capa adicional de seguridad, ya que necesita conocer el esquema de objeto correcto para consultar o manipular datos. También puede controlar el acceso al esquema y a los objetos que pertenecen al esquema.