Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Usando esquemas de banco de dados no SQL Server




Este artigo explicará o que são esquemas de banco de dados, suas vantagens e como criar e usar esquemas no SQL Server.

Em um sistema de gerenciamento de banco de dados relacional, como o SQL Server, o banco de dados contém vários objetos. Podem ser tabelas, procedimentos armazenados, visualizações e funções. Em um banco de dados, o esquema refere-se à coleção lógica de objetos de banco de dados. Você pode usar esquemas para separar objetos dependendo do aplicativo, direitos de acesso e segurança.

Esquemas do SQL Server


O SQL Server fornece os seguintes esquemas lógicos internos:
  • dbo
  • sistema
  • convidado
  • INFORMATION_SCHEMA

Todo esquema do SQL Server deve ter um usuário de banco de dados como proprietário do esquema. O proprietário do esquema tem controle total sobre o esquema. Você também pode alterar o proprietário do esquema ou mover objetos de um esquema para outro.

Os esquemas do SQL Server fornecem os seguintes benefícios:
  • Fornece mais flexibilidade e controle para gerenciar objetos de banco de dados em grupos lógicos
  • Permite mover objetos entre diferentes esquemas rapidamente
  • Permite que você gerencie a segurança do objeto no nível do esquema
  • Permite que os usuários gerenciem grupos lógicos de objetos em um banco de dados
  • Permite que os usuários transfiram a propriedade entre vários esquemas

Suponha que, para o banco de dados da sua organização, você queira agrupar objetos com base em departamentos. Por exemplo, as tabelas e procedimentos armazenados para o departamento de RH devem ser agrupados logicamente no esquema [HR]. Da mesma forma, as tabelas do departamento financeiro devem estar no esquema [Fin]. Cada esquema (grupo lógico) contém objetos do SQL Server, como tabelas, procedimentos armazenados, exibições, funções, índices, tipos e sinônimos.



Nota:O esquema é uma entidade com escopo de banco de dados. Você pode ter o mesmo esquema em diferentes bancos de dados de uma instância do SQL Server.

Por padrão, o SQL Server usa o esquema [dbo] para todos os objetos em um banco de dados. Podemos consultar SCHEMA_NAME() para obter o esquema padrão para o usuário conectado.
SELECT SCHEMA_NAME() AS defaultschema;


Listando todos os esquemas de banco de dados no banco de dados atual


Você pode obter uma lista dos esquemas usando uma consulta SSMS ou T-SQL. Para fazer isso no SSMS, você deve se conectar à instância SQL, expandir o banco de dados SQL e visualizar os esquemas na pasta de segurança.



Como alternativa, você pode usar sys.schemas para obter uma lista de esquemas de banco de dados e seus respectivos proprietários.
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;

Criando um esquema do SQL Server usando CREATE SCHEMA


Para criar um novo esquema do SQL Server, usamos a instrução t-SQL CREATE SCHEMA. Sua sintaxe é mostrada abaixo.
CREATE SCHEMA <schema_name>
AUTHORIZATION <owner_name>
  • Schema_name:este é o esquema que queremos criar
  • Autorização:este é o nome do proprietário do esquema

O script para criar esquemas [HR], [Admin] e [Fin] com o dono do esquema [dbo] é mostrado abaixo.
CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

Você pode atualizar o banco de dados e visualizar o esquema recém-criado conforme mostrado abaixo.


Criando uma nova tabela dentro de um esquema


Para criar objetos como uma tabela, precisamos especificar o nome do esquema no qual o objeto será criado. Por exemplo, o script a seguir cria [TableA] em diferentes esquemas [HR], [Admin] e [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)
)



Você pode unir as tabelas de sistema sys.tables e sys.schema para listar o nome da tabela com seus esquemas. Por exemplo, a consulta abaixo retorna [TableA] com seu 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'



Se você não especificar um esquema ao criar o objeto, o SQL Server usará o esquema padrão. Por exemplo, o script abaixo cria um TableA no esquema dbo.
CREATE TABLE TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)



Nota:Você pode criar uma tabela com um nome semelhante no esquema diferente de um banco de dados.

Você deve especificar o esquema da tabela para buscar dados do esquema correto. Por exemplo, conforme mostrado acima, temos [Tabela A] em todos os esquemas. Portanto, se você selecionar registros diretamente sem especificar o esquema, ele procurará um objeto no esquema DBO padrão. Portanto, sempre especifique o nome do esquema como SELECT * FROM HR.TableA para recuperação de dados ou execução de qualquer operação.

Criando um procedimento armazenado em um esquema


Da mesma forma, você pode criar objetos como procedimentos armazenados em esquemas especificados. Por exemplo, o script abaixo cria um SP no esquema HR.
CREATE PROCEDURE HR.GetEmpData
AS
BEGIN
SELECT * FROM [HR].[TableA]
END

Transferindo o objeto para um esquema diferente


Em algum momento, você pode receber um requisito para mover o objeto para um esquema específico. Por exemplo, suponha que você criou um novo esquema [Org] e deseja que seu [HR].[TableA] mude do esquema [HR] para o esquema [Org].

Nesse caso, você pode usar o comando Alter SCHEMA com a seguinte sintaxe.
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

O script abaixo transfere o objeto [HR].[TableA] para o esquema [Org].
CREATE SCHEMA [ORG]
GO
ALTER SCHEMA ORG TRANSFER HR.TableA

Agora, vamos transferir o procedimento armazenado [HR].[GetEmpData] para o esquema [Org].
ALTER SCHEMA ORG TRANSFER HR.GetEmpData

Depois de executar o script, ele mostra o procedimento armazenado no esquema [Org].



No entanto, dentro do procedimento armazenado, o código ainda se refere ao esquema [HR].[TableA].



Portanto, você não deve mover procedimentos armazenados, funções ou exibições usando a função ALTER SCHEMA, pois ela pode ter referências para os objetos na definição. Em vez disso, você pode descartar, criar ou alterar o procedimento conforme mostrado abaixo.


Descartando um esquema


Você pode descartar um esquema em um banco de dados SQL Server, mas o esquema não deve conter nenhum objeto. Por exemplo, se eu tentar descartar o esquema [Org], dá um erro que você não pode descartar o esquema porque o objeto GetEmpData está fazendo referência a ele.



Portanto, você pode transferir o objeto para um esquema diferente ou descartar os objetos primeiro. Por exemplo, vamos descartar os procedimentos armazenados GetEmpData e, em seguida, tentar descartar o esquema. Novamente recebemos um erro porque temos [TableA] no esquema [Org].



Depois de descartar ou mover todos os objetos no esquema do banco de dados, você pode descartar o esquema.



Observação:você não pode descartar esquemas do sistema, como dbo, information_schema, sys.

Vantagens de usar esquemas de banco de dados

  • Os esquemas de banco de dados nos fornecem a flexibilidade de criar grupos de objetos lógicos em um banco de dados. Se várias equipes estiverem trabalhando com o mesmo banco de dados, podemos projetar vários esquemas para segregar seus objetos.
  • Os esquemas de banco de dados ajudam os profissionais de banco de dados a gerenciar o acesso, pois você pode controlar o acesso aos usuários para seus respectivos esquemas em vez de fornecer acesso ao banco de dados como um todo.
  • Você pode gerenciar bancos de dados com mais eficiência porque permite que os mesmos objetos em vários esquemas apareçam como um grupo lógico diferente.
  • Você pode mover objetos rapidamente em diferentes esquemas.
  • A propriedade do esquema pode ser atribuída a qualquer entidade de banco de dados ou funções e a propriedade também pode ser transferida.
  • Ele fornece uma camada adicional de segurança, pois você precisa conhecer o esquema de objeto correto para consultar ou manipular dados. Você também pode controlar o acesso ao esquema e aos objetos de propriedade do esquema.