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 / 343786
Accepted
mowalid0
mowalid0
Asked: 2024-11-22 16:30:22 +0800 CST2024-11-22 16:30:22 +0800 CST 2024-11-22 16:30:22 +0800 CST

Perguntas no projeto de banco de dados coerce da faculdade

  • 772

Agora estou criando um BD de sistema bancário que é mais conveniente no caso da entidade de conta para torná-la a chave primária composta de chaves estrangeiras (id da agência, id do cliente, id do serviço, quatro inteiros gerados para exclusividade) para serviço de contexto como empréstimo etc., ou torná-los apenas chaves estrangeiras normais. Se você puder fornecer um caso mais geral em que a chave composta seja o melhor caso de uso

database-design
  • 1 1 respostas
  • 24 Views

1 respostas

  • Voted
  1. Best Answer
    Uddyan Semwal
    2024-11-22T21:08:23+08:002024-11-22T21:08:23+08:00

    1. Chave primária em um sistema bancário:

    Para a entidade de conta em um sistema bancário, o objetivo é identificar exclusivamente cada conta, mantendo a integridade referencial com outras entidades, como agências, clientes e serviços (por exemplo, serviços de empréstimo).

    Opção 1: Chave Primária Composta Uma chave composta é uma chave primária que consiste em múltiplos atributos. No seu caso, você está considerando uma chave composta formada por:

    branch_id (foreign key to Branch)
    client_id (foreign key to Client)
    service_id (foreign key to Service, such as Loan)
    

    Quatro inteiros gerados (para unicidade) Caso de uso para chaves compostas: Uma chave primária composta pode ser usada em situações em que a combinação desses atributos forma naturalmente uma entidade única. Por exemplo:

    Um cliente específico pode ter uma conta com um serviço específico (empréstimo, cartão de crédito, etc.) em uma agência específica. Os quatro inteiros gerados garantiriam exclusividade caso a combinação de branch_id, client_id e service_id não fosse única o suficiente. Por que usar chaves compostas?

    Impondo Unicidade: Se você tem certeza de que uma combinação dessas chaves estrangeiras junto com os inteiros gerados forma uma representação única e válida de uma conta, então uma chave composta faz sentido. Normalização: Essa abordagem garantiria que nenhum dado redundante fosse armazenado e que cada conta fosse vinculada exclusivamente à combinação de filial, cliente e tipo de serviço. Integridade de Dados: Ao usar chaves estrangeiras como parte da chave primária, você garante que cada conta esteja sempre vinculada a registros válidos nas tabelas referenciadas. No entanto, chaves compostas podem ter algumas desvantagens:

    Complexidade: Chaves compostas podem tornar consultas e junções mais complexas, especialmente ao lidar com várias chaves estrangeiras. Desempenho: Indexar em chaves compostas pode ser menos eficiente do que indexar uma única chave (como um account_id). Isso pode impactar o desempenho, especialmente conforme o banco de dados cresce. Opção 2: Usar chaves estrangeiras normais Como alternativa, você pode escolher manter cada chave estrangeira (por exemplo, branch_id, client_id, service_id) como colunas individuais e usar uma chave primária substituta como account_id (um identificador exclusivo como account_id INT PRIMARY KEY).

    Caso de uso para chaves estrangeiras normais + chave substituta:

    Nessa abordagem, cada chave estrangeira faz referência à entidade relacionada (filial, cliente, serviço), mas a chave primária da entidade da conta é uma chave substituta e exclusiva (account_id) que é gerada para cada conta, independentemente das chaves estrangeiras.

    Por que usar chaves estrangeiras normais + chave substituta?

    Simplicidade: Esta abordagem é mais simples e flexível, pois a chave primária (account_id) é um identificador único e exclusivo para cada registro. Isso pode simplificar a indexação, a consulta e a junção de tabelas. Escalabilidade: Usar uma única chave substituta como account_id pode ser mais eficiente em sistemas de larga escala, pois a indexação e a otimização de consulta são mais fáceis ao usar chaves primárias de coluna única. Desacoplamento: A chave primária não depende das chaves estrangeiras, o que torna mais fácil manter e modificar o esquema sem afetar a integridade da chave primária.

    2. Quando você deve usar chaves compostas?

    Uma chave composta geralmente é uma boa opção nos seguintes casos:

    Relacionamentos naturais: quando a combinação de várias colunas (como branch_id, client_id e service_id) forma naturalmente um identificador exclusivo para uma linha, e você deseja impor essa exclusividade no nível do banco de dados.

    Por exemplo, se a combinação de uma agência, cliente e tipo de serviço for sempre única, então uma chave composta pode funcionar bem. No entanto, se qualquer uma dessas combinações puder aparecer mais de uma vez (por exemplo, um cliente pode ter várias contas de empréstimo com a mesma agência), uma chave composta pode não ser ideal.

    Relacionamentos muitos-para-muitos: Chaves compostas são frequentemente usadas em tabelas de junção (relacionamentos muitos-para-muitos) onde cada registro representa uma combinação única de chaves estrangeiras. Por exemplo, em uma tabela "account_services" que rastreia quais serviços um cliente assinou, uma chave composta pode ser apropriada se a combinação de client_id e service_id for única.

    CREATE TABLE account_services (
        client_id INT,
        service_id INT,
        branch_id INT,
        UNIQUE(client_id, service_id, branch_id),
        PRIMARY KEY(client_id, service_id, branch_id)
    );
    
    • 1

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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