Olá! Seja bem-vindo!

Quando você começa a trabalhar com um banco de dados que já está em uso, é comum a necessidade de listar constraints para conhecer melhor as restrições de integridade que existem no banco.

 

Na aula de hoje, veremos dois aspectos importantes para você que está chegando agora para trabalhar com um banco de dados que já está em uso:

– Porque é importante nomear as constraints (restrições de integridade) apropriadamente;

– A diferença entre system named constraints e constraints nomeadas manualmente.

 

Como LISTAR CONSTRAINTS

Utilize o script abaixo para fazer o levantamento de constraints em qualquer banco de dados SQL:

 

[sociallocker id=”5114″]



----------------------------------------------------------------------------------------------------
-- Listar system named constraints
----------------------------------------------------------------------------------------------------

--------------------------------------------------
-- Banco de dados para nosso teste
--------------------------------------------------
-- Banco de testes
use master
if db_id('curso') is not null 
	drop database curso
go
create database curso
go
use curso
go
create table colaboradores (
	id smallint identity(1,1) constraint pk_colaboradores primary key,
	nm varchar(100) not null,
)

create table produtos (
	id smallint identity(1,1) constraint pk_produtos primary key,
	nm varchar(100),
	vl decimal(10,2),
	ic_ativo bit not null constraint df_produtos_ic_ativo default (1)
)

create table vendas (
	id int not null identity(1, 1) primary key,
	dt datetime not null,
	id_produto smallint not null constraint fk_vendas_produtos_id_produto foreign key references produtos(id),
	id_vendedor smallint foreign key references colaboradores(id),
	qt int check (qt > 0),
	vl_unitario decimal (10,2), 
	vl_venda as qt * vl_unitario
)


--------------------------------------------------
-- System named constraints
--------------------------------------------------
-- Método 1
select 
	object_schema_name(sc.id) as [schema],
	sop.type_desc as tipo_objeto_pai,
	object_name(sc.id) as objeto_pai,
	col_name(sc.id, sc.colid) as coluna,
	object_name(sc.constid) as nome,
	so.type_desc as tipo,
	scm.text as texto,
	case when sc.status & 0x20000 > 0 then 1 else 0 end as system_named
from sys.sysconstraints sc
inner join sys.all_objects so on so.object_id = sc.constid
inner join sys.all_objects sop on sop.object_id = sc.id
left join sys.syscomments scm on scm.id = sc.constid
order by tipo_objeto_pai, objeto_pai, nome


-- Scripts para excluir a constraint em cada cliente onde foi criada automaticamente em nosso exemplo:
-- Cliente 1: alter table vendas drop constraint PK__vendas__3213E83FB51131CB
-- Cliente 2: alter table vendas drop constraint PK__vendas__3213E83F0B549710
-- Cliente 3: alter table vendas drop constraint PK__vendas__3213E83F04F52750

-- Script para excluir a constraint em TODOS os clientes se tivesse sido nomeada manualmente:
-- alter table vendas drop constraint pk_vendas


-- Método 2
select * from sys.foreign_keys
select * from sys.key_constraints -- pk/uk
select * from sys.check_constraints
select * from sys.default_constraints



[/sociallocker]

 

CONCLUSÃO

Com certeza uma das dores de cabeça de um DBA é a padronização de nomenclaturas, e o primeiro passo na direção de solucionarmos esse problema é conhecermos as constraints, também chamadas de restrições de integridade no português.

 

O script que mostrei serve não somente para listar constraints, mas também para você ter uma visão geral do funcionamento do banco de dados.

 

Espero que também tenha gostado desse conteúdo.

 

Abraço do seu amigo Josué 🙂

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *