AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 18446
Accepted
HelloWorld1
HelloWorld1
Asked: 2012-05-28 09:04:33 +0800 CST2012-05-28 09:04:33 +0800 CST 2012-05-28 09:04:33 +0800 CST

Usando chave substituta após mesclar os dados da pessoa?

  • 772

Esta pergunta é sobre inteligência de negócios com SQL Server 2008 R2.

Se você tem uma pessoa chamada Jim Brown com sua data de nascimento e número de seguro social ( SSN ) localizados em três sistemas de origem diferentes.

Você usa uma chave substituta que deve conter o aniversário de Jim e o SSN depois de mesclar três linhas de dados em uma única linha na fase ETL?

sql-server sql-server-2008
  • 2 2 respostas
  • 1153 Views

2 respostas

  • Voted
  1. Best Answer
    Todd Everett
    2012-05-28T17:07:15+08:002012-05-28T17:07:15+08:00

    Uma chave substituta é um valor exclusivo atribuído pelo sistema para identificar uma ocorrência de entidade. Uma chave natural é o que o negócio usa para identificar uma ocorrência de entidade. Os sistemas de origem, bem como seu banco de dados de BI/integração de dados, podem usar qualquer um dos tipos para identificar a ocorrência da entidade - como Jim Brown em seu exemplo. No sistema de origem, chamamos o que o sistema de origem usa para identificar a ocorrência da entidade de chave de origem . Portanto, se você puder ter 3 sistemas de origem diferentes, cada um contendo Jim Brown, cada um terá uma chave de origem diferente além da chave natural - que você identificou como SSN + data de nascimento. O ambiente de preparação de BI, que o ETL usa, incluirá uma tabela de mapa de chaves que mapeará cada chave de origem para a chave substituta designada para o banco de dados de BI. Então por exemplo:

    Person  Table
    Surrogate Key   Name            Birthday     SSN          Other fields
    1                   Jim Brown   9-15-1988    123456789  
    
    Person Key Map          
    Surrogate Key   Source Key  Source System   
    1                   12345           System A    
    1                   230383          System B    
    1                   294829          System C
    

    Quando uma transação contra Jim Brown for processada, ela virá da fonte usando a chave source. Diga seu sistema A com a chave de origem 12345 com uma atualização para um dos outros campos. O ETL procura a chave de origem no mapa de chaves e a encontra, e sabe aplicar essa transação à linha em Person com uma chave substituta de 1.

    Se você tivesse apenas 1 sistema de origem, a vida seria fácil. Mas você tem 3. É aqui que entra a chave natural, pois você sabe que pode identificar Jim em qualquer sistema usando essas 2 características que nunca mudam e são verdadeiras sobre ele. Agora, digamos que você integre o Sistema D. A primeira transação chega para Jim Brown no sistema D, e a chave de origem do sistema D é AB2945. Agora, quando o ETL procura no mapa de chaves, ele não o encontra. Mas como você sabe que tem vários sistemas que podem conter uma pessoa, o ETL também faz uma pesquisa na tabela Person para a chave natural e pronto - uma correspondência. Agora o ETL insere uma nova linha no mapa de chaves para o System D também para Jim Brown.

    Então, em resumo, você sempredeseja usar uma chave substituta como a PK na tabela do banco de dados BI ao fazer a integração de dados da mesma entidade lógica entre muitas fontes. Você o mapeará para a chave de origem usando uma tabela de mapa de chaves e evitará duplicatas procurando a chave natural na tabela BI (junto com uma chave exclusiva alternativa na chave natural para garantir que não haja duplicatas). Agora, há muitos outros detalhes para resolver - como sua chave natural é realmente única, você deseja armazená-la em seu mapa de chaves para evitar pesquisas em Pessoa, você precisa lidar com chaves de fonte compostas, você mantém um histórico de mudanças de chave de fonte, você rastreia um sistema de registro e sistemas de referência, como você lida com a reutilização de chave de fonte (um problema potencialmente muito complicado por si só), etc. Mas este breve resumo dá a você uma ideia das diferenças entre , substituto, e chaves de origem e onde usar cada um no cenário de BI. Eu espero que isso ajude...

    • 3
  2. Thomas Stringer
    2012-05-28T09:52:43+08:002012-05-28T09:52:43+08:00

    Você está misturando chave substituta e chave natural. Se você estiver usando dados atuais (ou seja, "dados de aplicativo") como uma chave, seria uma chave natural (composta, neste caso). Mas um campo GUID ou Identity seria substituto.

    Há algumas coisas a considerar nesta situação. Em primeiro lugar, a combinação de aniversário e SSN sempre será única? Somente você e o domínio de sua empresa podem responder a essa pergunta, infelizmente não nós.

    A outra consideração é que isso provavelmente não será sequencial. A beleza de usar uma coluna de identidade como uma chave é que ela será sequencial (desde que você não faça nenhuma inserção de identidade por qualquer motivo). Quando as inserções em um índice clusterizado não são sequenciais, você terá divisões de página e possivelmente fragmentação severa.

    Espero que esses pontos o ajudem e, embora não sejam uma resposta definitiva como a maioria das coisas, "depende".

    • 1

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve