Array
(
)

Melhor Forma de Armazenar vinculos de duas tabelas em uma unica tabela

Emerson
   - 19 abr 2014

Ae pessoa, boa tarde a todos...
Estou com um caso a resolver e gostaria da opinião de vocês:
Tenho duas tabelas distintas. Uma para notas Emitidas e outra para Notas Recebidas;
Preciso criar outra tabela onde será armazenado os números das notas fiscais tanto emitidas como notas fiscais recebidas de um determinado processo. Como seria a melhor estrutura para esta situação:
Senário 1. Criar campos nesta tabela de armazenamento onde vou armazenar estas notas da chave das notas emitidas e criar sua FK e criar outros campos das notas recebidas e também sua devida FK;
Senário 2. Criar campos únicos que possa atender as duas notas (tanto emitida como recebida), não criar FKs porque não permitiria, mais criar triggers nas tabelas de notas Emitidas e Recebidas para validar e evitar a exclusão;
Qual seria a melhor situação na visão de vocês?

Marisiana
   - 19 abr 2014

Olá Emerson!
No meu ponto de vista, é mais correto utilizar a solução que você apresentou como primeira opção acrescentando algumas coisinhas para completar:

Citação:
Senário 1. Criar campos nesta tabela de armazenamento onde vou armazenar estas notas da chave das notas emitidas e criar sua FK e criar outros campos das notas recebidas e também sua devida FK;

Assim você terá uma tabela única para armazenamento das informações em comum dos documentos fiscais e apenas referenciará esse documento com FK nas tabelas que conterão os itens. Você pode acrescentar, na tabela documento, um atributo "tipo documento" para identificar se o documento é emitido ou recebido.
Lembrando que pode ser que seja necessário criar mais de uma PK nessa tabela de documentos como, por exemplo, a série do documento.
Recomendo que você analise se é necessário criar uma tabela para cada tipo de nota (emitida e recebida). Pode ser que criando apenas uma tabela seja possível armazenar as informações de todos os documentos e a forma de diferenciar elas, será pela informação que será informada no atributo "tipo documento".

Emerson
   - 19 abr 2014

Boa tarde Marisiana, obrigado pela colaboração..

É basicamente como você disse mesmo.. eu preciso e já tenho série nestes documentos. Em resumo ta assim:

Nota Fiscal Emitida=
Campos: Empresa, Numero e Serie como sendo PK;

Nota Fiscal Recebida=
Campos: Empresa, Fornecedor, Numero e Serie como sendo PK;

Ai nesta terceira tabela onde eu preciso armazenar todas as notas de um processo seja esta nota emitida e recebida é que fiquei na duvida.

Senário 1: Onde teria campos e FK específicos para Emitida e Recebidas..
Campos da Tabela:
Empresa
Numero
EmitidaEmpresa
EmitidaNumero
EmitidaSerie
RecebidaEmpresa
RecebidaFornecedor
RecebidaNumero
RecebidaSerie

Senário 2 onde teria campos únicos tanto para emitidas e recebidas e sem FK, trabalhando com trigger para alterações e exclusões:
Campos da Tabela:
Empresa
Numero
NotaEmpresa
NotaFornecedor
NotaNumero
NotaSerie

Roniere Almeida
   - 21 abr 2014

boa tarde, acompanhando o post, é de bastante interesse, se alguem puder postar a imagem da modelagem, ficaria grato. apenas para melhor entendimento.

Emerson
   - 23 abr 2014

Fiz um modelo de como seria a modelagem nos dois senários:

Senário 1: Onde a tabela que centraliza as notas tem campos especificos para cada tabela e com suas devidas FKs..
Clique na imagem para abrir em uma nova janela

Senário 2: Onde a tabela que centraliza as notas tem campos unicos para armazenar os dois tipos de notas, com um campo de Status para dizer qual tipo de nota é e sem nenhuma FK, porque são os mesmos campos e não é permitido criar FKs.. Tratamento de Exclusão e Alteração ficaria a cargo do sistema neste caso.
Clique na imagem para abrir em uma nova janela

Deu pra entender?

Jefferson Santos
   - 24 abr 2014

Vamos lá, não li todo o topico somente a sua primeira duvida.
A meu ver o ideal seria criar as tabelas:

NFE

PK - ID_NFE -- Numero de NFE

Processo_NFE

PK - ID_Processo -- Sequencia de Notas Fiscais enviadas para receita
PK - sChavedeAcesso -- Chave de Acesso (XML)
FK - ID_NFE -- Numero de NFE

NFE_Autorizada
PK - ID_Autorizada
FK - sChavedeAcesso -- Chave de Acesso (XML)
FK - ID_NFE -- Numero de NFE

NFE_Rejeitada
PK - ID_Rejeitada
FK - sChavedeAcesso -- Chave de Acesso (XML)
FK - ID_NFE -- Numero de NFE

Emerson
   - 24 abr 2014


Citação:
Vamos lá, não li todo o topico somente a sua primeira duvida.
A meu ver o ideal seria criar as tabelas:

NFE

PK - ID_NFE -- Numero de NFE

Processo_NFE

PK - ID_Processo -- Sequencia de Notas Fiscais enviadas para receita
PK - sChavedeAcesso -- Chave de Acesso (XML)
FK - ID_NFE -- Numero de NFE

NFE_Autorizada
PK - ID_Autorizada
FK - sChavedeAcesso -- Chave de Acesso (XML)
FK - ID_NFE -- Numero de NFE

NFE_Rejeitada
PK - ID_Rejeitada
FK - sChavedeAcesso -- Chave de Acesso (XML)
FK - ID_NFE -- Numero de NFE



Jefferson, obrigado pela Ajuda, mais não é isso não...

Jefferson Santos
   - 24 abr 2014

Você diz Cupom Fiscal?

Emerson
   - 24 abr 2014


Citação:
Você diz Cupom Fiscal?


Não... Minha duvida é qual a melhor forma de montar a estrutura de uma tabela que tem por objetivo armazenar as notas emitidas e recebidas de um determinado processo...

As tabelas de notas, tanto as Emitidas com as Recepcionadas já estão prontas... agora preciso de uma terceira tabela que armazene o numero de varias destas notas.. todas que estiver ligadas a um processo... minha duvida é quanto as colunas.. se crio as colunas separadamente para notas Emitidas e Notas Recebidas ou se crio colunas únicas... o que impossibilitaria a criação de FK entre as tabelas.;..

Jefferson Santos
   - 24 abr 2014


Citação:

Citação:
Você diz Cupom Fiscal?


Não... Minha duvida é qual a melhor forma de montar a estrutura de uma tabela que tem por objetivo armazenar as notas emitidas e recebidas de um determinado processo...

As tabelas de notas, tanto as Emitidas com as Recepcionadas já estão prontas... agora preciso de uma terceira tabela que armazene o numero de varias destas notas.. todas que estiver ligadas a um processo... minha duvida é quanto as colunas.. se crio as colunas separadamente para notas Emitidas e Notas Recebidas ou se crio colunas únicas... o que impossibilitaria a criação de FK entre as tabelas.;..


Nesse caso que estão numa mesma tabela pode criar uma simples coluna Situação e utilizar a constraint check para diferencia-las.

João Antonio
|
MVP
Pontos: 110
    05 mai 2014

Bom dia Emerson,
Seus dados vão ficar em redundância nos dois modelos, campos repetitivos (total produtos, e total nota fiscal) aconselho fazer uma outra modelagem de dados para evitar essa situação.

Att
João Antonio