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
Comente ou deixe um trackback: URL do Trackback.

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 )

Foto do Google+

Você está comentando utilizando sua conta Google+. 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 )

w

Conectando a %s

%d blogueiros gostam disto: