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
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?
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:
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.