locked
Chaves primárias e secundárias RRS feed

  • 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

    quarta-feira, 27 de fevereiro de 2013 11:48
    Moderador

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

    quarta-feira, 27 de fevereiro de 2013 11:48
    Moderador
  • 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