none
Desenho do banco de dados e integração com EF v1 RRS feed

  • Pergunta

  • Pessoal

    Estou com a seguinte dúvida.

    Teremos no projeto os seguintes itens:
    • Contrato
    • Ordem de Serviço
    • Venda
    Dentro do sistema estes três itens fazem parte de serviço e naturalmente compartilham muitas informações como datas de criação e modificação, cliente, funcionário responsável e etc., ou seja, seriam três classes bastante parecidas, mas naturalmente com alguns detalhes que as tornam especificas.

    Com isto em mente imaginamos o seguinte, criar uma classe serviço e atrelá-la (um para um) a outra classe, venda, ordem de serviço ou contrato (porém um serviço só poderá ter uma venda, ordem de serviço ou contrato por vez)

    E uma outra característica importante é que contrato pode colecionar ordens de serviço, que pode sua vez pode colecionar vendas.

    Incialmente as tabelas ficaram da seguinte forma (resumidamente claro)

    SERVICO
    ServicoId [PK]
    ...

    CONTRATO
    ContratoId [PK]
    ServicoId [FK] [Allow Nulls]
    ...

    CONTRATO - ORDEM DE SERVICO
    ContratoId [PK]
    OrdemServicoId [PK]

    ORDEM DE SERVICO
    OrdemServicoId [PK]
    ServicoId [FK][Allow Nulls]
    ...

    ORDEM DE SERVICO - VENDA
    OrdemServicoId [PK]
    VendaId [PK]

    VENDA
    VendaId [PK]
    ServicoId [FK][Allow Nulls]
    ...

    Desta forma, no EF, o modelo é desenhado sempre como um para muitos (um serviço podendo ter muitas vendas por exemplo); o que está errado neste desenho? Como eu posso estruturar o banco para que esse mapeamento seja feito automáticamente?

    O Model Designer permite que eu mude a cardinalidade na unha, mas gostaria de opnião de vocês, se o caminho é esse mesmo.

    Se eu relacionar diretamente os ID's com ServicoId ele criar o relacionamento 1:1 apenas com contrato e inibe os outros alegando que a FK por participar de multiplos relacionamentos pode gerar inconsistências, ficando tudo encadeado, por exemplo: servico > contrato > ordem de servico > venda, ou seja, para se ter uma venda eu precisaria obrigatóriamente de uma ordem de servico e um contrato, o que não me atende.

    Alguma luz?

    Obrigado a todos
    terça-feira, 13 de outubro de 2009 14:41

Respostas

  • Não sei se entendi direito mas eu estruturaria a parte de venda da seguinte forma:

    Documento
       /\
        |
        |
    Venda
       /\
       \/
        |
        |
     ItensVenda
            /\
             |
       -----|------
       |             |
    Servico    Itens
      

    Na classe de serviço eu indicaria uma FK para o serviço que estou prestando e se for o caso uma referência para um contrato específico...
    Acredito que fica um modelo mais "limpo".


    Atenciosamente
    Djonatas tenfen

    *não esquema de marcar como resposta caso o post lhe for útil.
    terça-feira, 13 de outubro de 2009 16:52