SQL Server 2011 – Sequencias

Outra grande novidade do SQL Server 2011 são os objetos “sequence” (Sequencia), ja existem outros SGDB´s 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-6E08795D53E.
– 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.

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 reespectivamente.

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 atravez 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.

Anúncios
Post a comment or leave a trackback: Trackback URL.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: