Quantcast
Channel: Tripletech IT Solutions » Sem classificação
Viewing all articles
Browse latest Browse all 6

SQL 2011 – Sequences

0
0

Outra grande novidade do SQL Server 2011 são os objetos “sequence” (Sequencia), ja existem outros SGDBs onde este objeto ja é implementado a algumas versões, porem só nesta nova versão o mesmo foi introduzido ao SQL Server.

É comum ver em algumas modelagens de banco de dados os seguintes relacionamentos:

Até o SQL Server 2008, iste tipo de modelagem só era possivel de 3 maneiras:

  • Alterando-se as chaves primarias das tabelas Cliente e Funcionario para uma chave primaria composta.

Problema: Voce tera um campo a mais de PK em sua tabela, maior ocupação de espaço em disco, leitura e entendimento um pouco complicado.

  • Utilizando do datatype UNIQUEIDENTIFIER e a função NEWID().

Problema: O UNIQUEIDENTIFIER ira gerar um valor parecido com este: 534A9F7D-6CB7-44A2-9EA5-F6E08795D53E.

  • Utilizando por exemplo PK IDENTITY(1,2) (Numeros impares) para uma tabela e PK IDENTITY (2,2) (Numeros pares) para a outra tabela.

Problema: Dados confusos, principalmente se por algum motivo voce tiver que remover algum dado, ou alterar.

Pode haver lacunas, por exemplo, se voce inserir 3 linhas em uma tabela, e apenas 1 na outra, voce tera 2 lacunas em PK na tabela que recebeu menos dados.

 

Com o novo objeto sequence, este tipo de modelagem se torna mais facil tanto em sua implementação quanto em seu gerenciamento. Este objeto é criado pela seguinte sintaxe:

CREATE SEQUENCE Schema.SequenceName
AS INT
MINVALUE 0,
NO MAXVALUE,
START WITH 1,
INCREMENT BY 1

Considerações:

  • O nivel de permissionamento em relação aos objetos sequence continua igual em relação aos outros objetos, podendo ser diretamente ou por schema;
  • Por mais que voce possa definir um valor maximo e minimo, os limites de cada datatype na definição serão respeitados, por exemplo, na sequence criada acima, o range de valores possiveis é:-2^31 (-2,147,483,648) a 2^31-1 (2,147,483,647), que representa o menor e maior valor possivel para um dado INT respectivamente.

Voltando ao nosso modelo relacional, com o uso de sequence, o insert nas tabelas de Cliente e Funcionario seriam:

INSERT INTO Cliente VALUES (NEXT VALUE FOR Schema.SequenceName, 'Fabrizzio')
INSERT INTO Funcionario VALUES (NEXT VALUE FOR Schema.SequenceName, 'Caputo')

Vantagens da utilização de sequences:

  • Maior facilidade de implementação;
  • Não havera lacunas (Caso não haja erros ou deleções);
  • Possibilidade de gerenciamento do objeto sequence atraves do comando ALTER SEQUENCE;
  • Maior controle dos seus dados;
  • Facil manutenção;
  • Possibilidade de reserva de ranges;
  • Mais rapido que o IDENTITY.

Desvantagens:

  • Não trabalha por transação, ou seja:

CREATE dbo.SequenciaTeste
AS INT
START WITH 1,
INCREMENT BY 1
 
BEGIN TRAN
SELECT NEXT VALUE FOR dbo.SequenciaTeste
ROLLBACK TRAN
SELECT NEXT VALUE FOR dbo.SequenciaTeste

Resultado: 1 e 2, Ou seja, não foi feito o Rollback do valor da sequence. Portanto no caso de erro ou rollback da transação, voce perdeu este valor da sequencia, sera necessario insert manual do mesmo na tabela.

The post SQL 2011 – Sequences appeared first on Tripletech IT Solutions.


Viewing all articles
Browse latest Browse all 6

Latest Images





Latest Images