Usuário com melhor resposta
Chaves primárias e secundárias

Pergunta
-
Olá,
Já li algumas coisas sobre chave primarias e chaves secundarias, mas nunca percebi bem o objectivo da coisa :/
Se pudessem passar-me exemplos sobre o assunto agradecia. Pois sei que isso é muito importante no banco de dados, mas eu não uso pois tenho dificuldade em identificar as chaves primárias e secundárias nas minhas tabelas.
Obrigado
terça-feira, 26 de fevereiro de 2013 23:41
Respostas
-
Jonas,
Primaria:
Chave primaria é um identificador unico daquela linha naquela tabela, possui o meio de acesso mais restritivo possivel de uma tabela pois fazendo um filtro no predicado de uma query por sua chave primaria voce tem a garantia de que apenas uma linha será retornada. A chave primaria pode ser o que chamamos de Natural Key ou Surrogate Key.
Natural Key: Chave primaria na visão de negocio, por exemplo um CPF, aonde um cliente possui apenas um CPF e este CPF é unico para o territorio Brasileiro, então é uma chave naturalmente primaria alinhada com o negocio.
Surrogate Key: É uma chave criada randomicamente (Normalmente um incrimental de 1 em 1 por exemplo, [IDENTITY(1,1)]) e não possui vinculo forte com o negocio, eu sinceramente prefiro esta utilização ainda que para uma tabela de clientes por exemplo,pois a chave primaria é o valor que estara nos relacionamentos de sua tabela, ou seja, na modelagem de sua base de dados, e quanto menos engessado em relação ao negocio melhor. Imagine a seguinte situação, hoje voce tem um sistema aonde a chave da tabela de cliente é CPF, porem, após uma decisão da diretoria um novo modelo de negocio deverá ser incorporado no sistema e neste o cliente não é obrigado a passar o CPF, o que fazer caso esteja sendo utilizado Natural Key? Remodelar e reprogramar tudo! E se for Surrogate Key? Alterar logica de processos, o que é muito mais simples.
Uma chave primaria pode ser simples ou composta.
Simples: Id, CPF, aonde um unico campo representa a unicidade, aonde passando em um predicado (WHERE) de uma query apenas este campo voce tem a garantia de retorno de apenas uma linha
Composto: RG e ESTADO, aonde a composição destes 2 campos represenção apenas uma linha de sua tabela.
Secundaria:
Vamos supor que temos uma tabela de Clientes aonde a chave primaria é Id_Cliente e uma tabela de vendas, voce deverá mapear uma venda a um cliente e em um SGBD relacional como o SQL Server isso é feito atravez de chaves estrangeiras (Ou secundarias), portanto na tabela de vendas haverá tambem uma coluna chamada Id_Cliente cuja qual fará referencia a tabela de Clientes.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Roberson Naves quarta-feira, 27 de fevereiro de 2013 11:55
- Marcado como Resposta Fabrizzio CaputoModerator quinta-feira, 28 de fevereiro de 2013 12:11
quarta-feira, 27 de fevereiro de 2013 11:48Moderador
Todas as Respostas
-
Jonas,
Primaria:
Chave primaria é um identificador unico daquela linha naquela tabela, possui o meio de acesso mais restritivo possivel de uma tabela pois fazendo um filtro no predicado de uma query por sua chave primaria voce tem a garantia de que apenas uma linha será retornada. A chave primaria pode ser o que chamamos de Natural Key ou Surrogate Key.
Natural Key: Chave primaria na visão de negocio, por exemplo um CPF, aonde um cliente possui apenas um CPF e este CPF é unico para o territorio Brasileiro, então é uma chave naturalmente primaria alinhada com o negocio.
Surrogate Key: É uma chave criada randomicamente (Normalmente um incrimental de 1 em 1 por exemplo, [IDENTITY(1,1)]) e não possui vinculo forte com o negocio, eu sinceramente prefiro esta utilização ainda que para uma tabela de clientes por exemplo,pois a chave primaria é o valor que estara nos relacionamentos de sua tabela, ou seja, na modelagem de sua base de dados, e quanto menos engessado em relação ao negocio melhor. Imagine a seguinte situação, hoje voce tem um sistema aonde a chave da tabela de cliente é CPF, porem, após uma decisão da diretoria um novo modelo de negocio deverá ser incorporado no sistema e neste o cliente não é obrigado a passar o CPF, o que fazer caso esteja sendo utilizado Natural Key? Remodelar e reprogramar tudo! E se for Surrogate Key? Alterar logica de processos, o que é muito mais simples.
Uma chave primaria pode ser simples ou composta.
Simples: Id, CPF, aonde um unico campo representa a unicidade, aonde passando em um predicado (WHERE) de uma query apenas este campo voce tem a garantia de retorno de apenas uma linha
Composto: RG e ESTADO, aonde a composição destes 2 campos represenção apenas uma linha de sua tabela.
Secundaria:
Vamos supor que temos uma tabela de Clientes aonde a chave primaria é Id_Cliente e uma tabela de vendas, voce deverá mapear uma venda a um cliente e em um SGBD relacional como o SQL Server isso é feito atravez de chaves estrangeiras (Ou secundarias), portanto na tabela de vendas haverá tambem uma coluna chamada Id_Cliente cuja qual fará referencia a tabela de Clientes.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Roberson Naves quarta-feira, 27 de fevereiro de 2013 11:55
- Marcado como Resposta Fabrizzio CaputoModerator quinta-feira, 28 de fevereiro de 2013 12:11
quarta-feira, 27 de fevereiro de 2013 11:48Moderador -
Amigo, sabe me dizer se o cpf, caso não indicado como chave primária no sistema de banco de dados, pode vir a se tornar uma chave secundária? Pois eu definindo algo como "matrícula" como PK, o cpf torna-se um campo não PK? Ou ele naturalmente vai ser(não podendo ser então uma chave secundária)?sábado, 20 de novembro de 2021 19:32
-
André,
De forma conceitual o CPF poderá se tornar uma chave secundário ou chave de acesso!
Mas de forma automática não, isso você tem que definir na estrutura da sua tabela.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Sugerido como Resposta Mariano1776Banned segunda-feira, 22 de novembro de 2021 21:06
segunda-feira, 22 de novembro de 2021 17:34