AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 27796
Accepted
FrankRuperto
FrankRuperto
Asked: 2012-10-29 19:55:09 +0800 CST2012-10-29 19:55:09 +0800 CST 2012-10-29 19:55:09 +0800 CST

Como devo projetar melhor as tabelas e relacionamentos, dadas as seguintes regras?

  • 772

Em uma casa de penhores, os clientes penhoram, vendem ou compram itens. Um contrato que especifica as informações dos clientes, os itens e os termos e condições é criado sempre que os clientes penhoram, vendem ou compram itens.

São permitidos até 6 itens por contrato. Se houver mais de 6, eles devem ser divididos em contratos separados. A razão para este limite é porque apenas um único contrato pode existir por formulário impresso. O formulário tem 8,5 por 5,5 polegadas (tamanho da metade da página), portanto, apenas 6 descrições de itens cabem em cada formulário. Legalmente, não podemos ter a página 1 de 2 para o mesmo contrato.

Todos os itens pertencentes a um contrato recebem um número de sequência de lote. Esse número de lote também é o número do contrato. O número do lote incrementa, independentemente de ser um contrato de penhor, compra ou venda. Cada tipo de contrato manterá seu próprio número de sequência de recebimento. Visualize um bloco separado para contratos de penhor com um número de recibo no canto superior direito, um bloco separado para compras e um bloco separado para vendas.

Vendas e compras são definitivas!

No entanto, os clientes podem fazer pagamentos de juros sobre seus peões ativos, caso em que o cliente fornece ao caixa uma cópia do recibo original, juntamente com o pagamento de juros. Em seguida, um novo recibo para os mesmos itens penhorados (ou seja, com o mesmo número de lote) é emitido, mostrando uma nova data de vencimento e o recibo original ou anterior é cancelado e arquivado pelo caixa.

Quando os clientes resgatam seus peões, nenhum novo recibo é emitido. O cliente assina o recibo, informando que os itens penhorados foram devolvidos a ele, o recibo é cancelado pelo caixa e arquivado.

À medida que outros clientes penhoram itens ou fazem pagamentos de juros, novos recibos são emitidos e entregues aos clientes.

EDIT: Se a casa de penhores não fornecesse um novo recibo para cada pagamento de juros, apenas atualizasse o contrato original com data de pagamento de juros, valor e nova data de vencimento, não teríamos complicações! No entanto, temos um número de recibo de peão que às vezes aumenta e às vezes não, dependendo do tipo de transação operada em cada peão.

O seguinte é um exemplo de transações de peão durante um período de tempo:

    CUSTOMER   TRANSACTION DATE/TIME   TRANSACTION TYPE     RECEIPT#
    --------   ---------------------   ----------------     --------

    Frank      Oct-28-2012,  9:00 am   New Pawn, Lot#501      P12345
    Mark       Oct-28-2012,  9:05 am   New Pawn, Lot#502      P12346
    Jeff       Oct-28-2012,  9:20 am   New Pawn, Lot#503      P12347

    ...
    (several other new pawns, which increment the lot and receipt numbers, and  
     interest payments which only increment the receipt numbers.)

    Mark       Nov-26-2012, 12:30 pm   Pawn Lot#502, Int Pymt P12945
    Frank      Nov-26-2012, 12:32 pm   Pawn Lot#501, Redeemed P12345 (no change)
    Jonathan   Nov-26-2012, 12:35 pm   New Pawn, Lot#600      P12946
    ...

    Jeff       Jan-30-2013, 12:39 pm   Pawn Lot#503, Forfeit  P12347 (no change)

Como você pode ver, os números dos lotes de peões nunca mudam ao longo da vida ou morte do peão, mas os números dos recibos aumentam à medida que diferentes clientes fazem pagamentos de juros sobre os peões existentes ou penhoram novos itens. Se um cliente não fizer nenhum pagamento de juros ou resgatar os itens penhorados até a data de vencimento, o cliente perderá os itens penhorados (o número do recibo permanece o mesmo) e a casa de penhores colocará esses itens em seu estoque.

BTW, quando a casa de penhores puxa um peão amadurecido, cada item nesse peão recebe o número de recibo mais atual, sufixado com o número do item dentro de cada contrato. Em seguida, eles são transferidos para o inventário da casa de penhores.

Assim, o segundo item no lote de penhora número 503, tendo um número de recibo de P12347, seria transferido para o estoque com um número de estoque atribuído de "P12347-2", onde "P" significa Penhor, "12347" era o recibo atual número e "-2" porque era o segundo item dentro daquele contrato de peão.

Eu pessoalmente não usaria esse esquema de numeração, mas muitas casas de penhores no meu bairro gostam de fazer as coisas dessa maneira porque afirmam que podem dizer quando foi a última vez que um determinado peão teve alguma atividade, com base em seu número de recibo, mais eles pode manter todos os seus peões fisicamente armazenados em ordem cronológica, facilitando a sua retirada.

Então, dadas as regras e exemplos acima, qual é a melhor maneira de projetar as tabelas e relacionamentos para essas regras, usando um banco de dados SQL como Informix ou MS-Access 2010 JetDB?

Seria melhor se houvesse uma tabela de contratos para todos os peões, compras e vendas ou tabelas de contratos separadas para cada um? E a tabela de transações que opera sobre a tabela de contratos?

database-design informix
  • 2 2 respostas
  • 1238 Views

2 respostas

  • Voted
  1. Best Answer
    Jonathan Leffler
    2012-10-31T17:49:12+08:002012-10-31T17:49:12+08:00

    Pelo que entendi, além de uma tabela Customer, você precisará de três tabelas:

    1. Contrato — mantendo os dados de valor único sobre um contrato, excluindo recibos. Ele pode registrar o último número de recebimento do contrato, mas isso seria uma otimização, armazenando dados deriváveis. Chave Primária: Número do Contrato (também conhecido como Número do Lote).
    2. Itens do contrato — mantendo os itens de 1 a 6 para o contrato. Chave Primária: Número do Lote, Número da Sequência do Lote. Número do Lote é uma referência de Chave Estrangeira ao Contrato.
    3. Recibos — contendo informações sobre recibos. Chave Primária: Número do Recibo. Chave Estrangeira: Referência do Número do Contrato ao Contrato novamente.

    Um determinado recibo está associado a um contrato; um único contrato pode ter vários recibos ao longo do tempo se for um contrato de penhor (os contratos de compra e venda terão um único recibo).

    Mesmo que um novo recibo não seja emitido quando um contrato de penhor for cancelado, será necessário que haja uma atualização do banco de dados do contrato ou do recibo (ou ambos) para indicar que o contrato foi cancelado.

    Há alguma coisa que estou perdendo aqui?

    • 5
  2. ekolis
    2012-10-29T20:04:07+08:002012-10-29T20:04:07+08:00

    Eu teria três tabelas: uma para contratos (contendo o número do contrato e detalhes do item ao qual o contrato está vinculado), uma para clientes (contendo as informações pessoais do cliente) e uma para transações (vinculando os dois por meio de muitos a muitos relacionamentos, e também contendo a data da transação, tipo de transação - embora você queira fazer tabelas separadas para cada tipo, fica a seu critério - e quantia de dinheiro envolvida).

    • 2

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve