Temos uma tabela base que define as peças e mantém informações como número da peça, descrição, preço, peso etc. Também temos aproximadamente 400 tabelas que fazem referência à tabela base e fornecem informações adicionais sobre as peças com base em seu tipo / categoria.
Começamos usando restrições de chave estrangeira para que uma parte não possa ser excluída da tabela base se estiver sendo referenciada em uma das tabelas específicas de 400 partes, mas rapidamente alcançamos o máximo de 253 chaves estrangeiras recomendadas para o SQL Server 2005.
Existem alternativas para chaves estrangeiras nessa situação que garantam a integridade dos dados? Não vimos problemas de desempenho ao acessar os dados, mas a atualização de uma peça existente na tabela base falhará, pois o plano de consulta é muito complexo.
fonte
Respostas:
Se houver alguma maneira de agrupar partes, você poderá introduzir tabelas intermediárias como solução alternativa. Isso não vai funcionar.
Mas algo nesse sentido pode.
Eu gostaria de dar uma olhada no seu DDL antes de recomendar isso, no entanto. E se você fizer isso, não comece a lançar números de identificação em todos os lugares. Você deve poder ingressar na "Tabela 400" diretamente em "Peças" sem incluir "peças GreenBlueIndigoViolet".
fonte
Se você realmente não pode combinar tabelas, por que não criar uma
TRIGGER
tabela na base para impedir a exclusão?Comece aqui: http://msdn.microsoft.com/en-us/library/ms189799(v=sql.90).aspx
fonte
Substitua as mais de 400 tabelas por uma. Precisa apenas de 3 campos (+1 de numeração automática ou qualquer chave primária, se desejar, não precisa ter, você pode formar a partir dos outros campos)
Valor do atributo do ID do item
Portanto, onde em suas outras tabelas cada campo representa um atributo, nessa tabela seus atributos estão todos em um campo. Você teria algo parecido com isto
Valor do atributo ItemID
Lã de material de meia
Meia Cor Vermelho
Peso da meia 20 libras
Alien Planet Alpha Centauri
Alien Color Purple
Alienígena Não
Os ItemIDs provavelmente devem ser um número / alfanumérico ofc. Em seguida, basta fazer a tabela de referência cruzada com Atributos como cabeçalhos de coluna quando necessário para gerar as tabelas como você desejar. Isso também permite melhores consultas para coisas como "Mostre-me todos os itens que são de Alpha Centauri", que podem devolver o Alien e também o fragmento de Meteorito que continha a praga que destrói a humanidade (está chegando .....)
A otimização pode ser complicada, dependendo de quantos registros existem, mas é uma maneira muito melhor de projetar isso. Fiz o mesmo para um banco de dados que continha várias receitas (10k +) com poucas sobreposições. Funcionou bem nesse caso. Realmente não tinha nenhum problema de velocidade. O seu pode ser mais difícil, dependendo de com quem você está lidando.
fonte
Entity
,Entity_Attribute
,Entity_Attribute_Value
). Se você deseja adicionar tratamento semi-adequado para diferentes tipos de dados e restrições de referência, precisará de mais.