none
Problema Foreign Key e Primary Key em banco de dados já existente RRS feed

  • Pergunta

  • Pessoal!

    Estou convertendo uma aplicação de VB6 para VB.NET com Entity Framework 5, que deve se conectar com um banco de dados já existente.
    O problema desse banco de dados é que ele não possui uma padronização, e várias tabelas estão sem Primary Key e Foreign Key.
    Para a questão da Primary Key eu vou adicionar as colunas como identity e setar o atributo, o problema está nas Foreign Key, pois hoje se eu adiciona-las vou gerar um erro no sistema em VB6 (Esse sistema em VB6 é modular, e por enquanto vou converter apenas um módulo dele).
    Um exemplo de problema que tenho hoje, para vocês entenderem.

    Tenho a tabela Venda e Venda_Item, dentro dessa tabela Venda_Item tenho a coluna Venda, que armazena o código da venda, mas NÃO tem Foreign Key com a Venda.
    E em alguns lugares do sistema ele DELETA primeiro os registros da venda e depois do venda_item.

    Contudo, devido a grande quantidade de clientes que ainda utilizam esse sistema em VB6 eu pensei fazer o seguinte.
    1 - Não criar a foreign key para tabelas críticas, desta forma não afeto os usuários que utilizam a versão antiga do sistema.
    2 - Dentro do VB.NET, na classe Venda_Item criar uma property chamada Venda do tipo venda mesmo e uma outra property chamada Codigo_Venda do tipo long
    3 - Na minha camada Business na classe do Venda_ItemBO adiciono um método chamado getVenda_ItemById, dentro desse método eu chamaria o método getVendaById, dessa forma eu conseguiria preencher o objeto venda normalmente, como se as tabelas estivessem relacionadas.

    Minha preocupação em fazer isso é o seguinte:
    1 - O sistema terá uma perca de desempenho considerável?
    2 - Essa solução é a melhor? Se não, alguém poderia me indicar algo?

    Agradeço desde já pela ajuda!
    quarta-feira, 16 de outubro de 2013 14:00

Todas as Respostas

  • Thiago bom dia,

    Para sanar o problema da exclusão no sentindo oposto, você pode utilizar a configuração de ON DELETE CASCADE que resolveria, você só precisaria tratar no VB6 para caso ele tente deletar e não tenha nada ele não acuse erro.

    Com relação a sua dúvida de performance, depende da quantidade de dados que estamos falando, a questão de FK e PK, ajuda muito em performance, mas você tem que avaliar o custo beneficio de uma mudança dessas, faça um backup do banco e aplique alguns testes para ver em produção o resultado.

    Att


    Guilherme Silva Cardoso

    quarta-feira, 16 de outubro de 2013 14:43