Tecnologia do Blogger.

Localizar

segunda-feira, 3 de junho de 2013

Criando chave estrangeira SQLServer

Seguindo a mesma linha dos artigos sobre banco de dados escritos anteriormente irei apresentar o script SQL para criação de chave estrangeira para tabelas.


Neste artigo não irei apresentar a estrutura do script e sim irei diretamente ao exemplo.

Vejamos:


begin transaction

use Exemplo;

go

--Código para criar a tabela primária
create table tbPessoas(
       CPF_CNPJ varchar(14) not null unique,
       Nome varchar(70) not null,
       Apelido varchar(70) null,
       DataNascimento date not null,
       TelContato1 varchar(10) not null,
       TelContato2 varchar(10) null,
       TelContato3 varchar(10) null
)

go

alter table tbPessoas add constraint PK_CPF_CNPJ primary key ([CPF_CNPJ]);

--criando a tabela secundaria 

create table tbDependentes(
       CodDependente int not null unique,
       Nome varchar(70) not null,
       CPF_CNPJ varchar(14) not null
)

go

alter table tbDependentes add constraint PK_CodDependente primary key ([CodDependente]);

go

alter table tbDependentes add constraint FK_CPF_CNPJ foreign key ([CPF_CNPJ]) references tbPessoas([CPF_CNPJ]);

rollback

  • Foram criadas duas tabelas tbPessoas e tbDependentes
  • Foram criadas duas constraints para chave primária 
    • PK_CPF_CNPJ - Como chave primária da tabela tbPessoas
    • PK_CodDependente - Como chave primária da tabela tbDependentes
  • Finalmente foi criada a constraint FK_CPF_CNPJ que efetua a ligação entre as tabelas tbDependentes e tbPessoas.
Obs.:
É importante lembrar que para criar uma chave estrangeira é preciso que as tabelas tenham chave primária. Não possuir chave primária NÃO vai gerar erro de execução somente erro de conceito relacional.
Não recomento utilização de campos identity para auto incrementar chave primária, visto que isso pode gerar problemas quando for necessário replicar dados ou trabalhar com este dado antes de ser incluído no banco.
A grafia de nome de constraint não tem por obrigação iniciar com PK ou FK, mas isso facilita a identificação do dano na base, onde PK é Primary Key e FK é Foreign Key.
Caso o relacionamento seja feito com chave composta basta somente separar as chaves por vírgula dentro do parentese. 
Ex: Considere a existência do campo NomePessoa nas duas tabelas.
alter table tbDependentes add constraint FK_CPF_CNPJ foreign key ([CPF_CNPJ], [NomePessoa]) references tbPessoas([CPF_CNPJ], [NomePessoa]);

Qualquer dúvida podem postar que responderei.

0 comentários: