Melhor Forma de Armazenar vinculos de duas tabelas em uma unica tabela
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?
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?
Emerson
Curtidas 0
Respostas
Marisiana Battistella
19/04/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:
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".
No meu ponto de vista, é mais correto utilizar a solução que você apresentou como primeira opção acrescentando algumas coisinhas para completar:
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".
GOSTEI 0
Emerson
19/04/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
É 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
GOSTEI 0
Roniere Almeida
19/04/2014
boa tarde, acompanhando o post, é de bastante interesse, se alguem puder postar a imagem da modelagem, ficaria grato. apenas para melhor entendimento.
GOSTEI 0
Emerson
19/04/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..
[img]http://arquivo.devmedia.com.br/forum/imagem/228065-20140423-150211.jpg[/img]
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.
[img]http://arquivo.devmedia.com.br/forum/imagem/228065-20140423-150408.jpg[/img]
Deu pra entender?
Senário 1: Onde a tabela que centraliza as notas tem campos especificos para cada tabela e com suas devidas FKs..
[img]http://arquivo.devmedia.com.br/forum/imagem/228065-20140423-150211.jpg[/img]
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.
[img]http://arquivo.devmedia.com.br/forum/imagem/228065-20140423-150408.jpg[/img]
Deu pra entender?
GOSTEI 0
Jefferson Santos
19/04/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
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
GOSTEI 0
Emerson
19/04/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
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...
GOSTEI 0
Jefferson Santos
19/04/2014
Você diz Cupom Fiscal?
GOSTEI 0
Emerson
19/04/2014
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.;..
GOSTEI 0
Jefferson Santos
19/04/2014
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.
GOSTEI 0
João Françozo
19/04/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
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
GOSTEI 0