Pergunta

Eu tenho um banco de dados que possui as seguintes relações:

Transaction->Purchase->Item->Schedule

Transaction - self explanitory
Purchase - any purchase info that relates to the item being purchased (quantity, if the user purchases more than one item).  A given Transaction can have more than one Purchase_ID tied to it.
Item - Stores Item info and relates it to individual clients.
Schedule - determines the price of an item at a given time of day.

Preciso executar uma consulta que deve selecionar uma série de valores do cronograma com base em se Transaction.TimeStamp está dentro de uma faixa de data fornecida. A consulta precisa selecionar um valor do cronograma com base na chave primária. A chave primária não é rastreável da transação.

Para resolver esse problema, decidi criar uma tabela para vincular a transação diretamente ao Primário do Agendamento.

Recentemente eu descobri Visualizações da tabela - Essa seria uma situação apropriada para fazer uma tabela "Visualização"? Ou devo apenas criar uma tabela 'real' TransactionSchedule?

transactionSchedule
Transaction_ID    Schedule_ID

Meu problema é que não entendo as especificidades de quando uma visualização de tabela é útil/quais são os benefícios.

Ter uma tabela individual para rastrear transação-> cronograma de agenda?

Realmente qualquer orientação geral com esse problema seria muito apreciada.

EDITAR: Esta consulta é apenas para recuperar dados que já foram inseridos

--obrigado

Foi útil?

Solução

Peço fortemente que você copie o preço da programação diretamente para comprar assim que estiver inserindo isso. Dessa forma, você resolveu seu problema e, ao mesmo tempo, impediu um preço diferente sendo cobrado para o cliente mais tarde, se você acidentalmente (ou intencionalmente) alterar o cronograma.

Quanto a se relacionar com a chave principal do cronograma, e isso não é rastreável a partir de uma transação: isso é um sinal de design ruim. Quero dizer, pense sobre isso - você tem um registro de data e hora na transação, uma programação por definição é colocada a tempo usando um de e para o timestamp - por que você não pode relacioná -los? Afaios, a chave primária de cronograma deve ser item_id, from_timestamp, to_timestamp

Supondo

SELECT     ..your columns..
FROM       Transaction t
INNER JOIN Purchase    p
ON         t.id        = p.transaction_id
INNER JOIN Item        i
ON         p.id        = i.purchase_id
INNER JOIN Schedule    s
ON         i.id        = s.item_id
AND        t.timestamp BETWEEN s.from_timestamp
                           AND s.to_timestamp

Quanto a você usar uma visão ou não - realmente, depende de você. Uma visualização não funciona melhor ou pior que uma consulta, a única diferença é que a definição é armazenada no banco de dados. As principais vantagens disso são

  • As pessoas podem reutilizar a definição sem copiar a consulta (e estragar tudo), o
  • Você pode alterar o esquema até certo ponto e ocultá -lo do aplicativo, desde que você atualize a visualização de acordo (esta última vantagem é frequentemente superestimada)

Outras dicas

O registro de transação não pode ter uma chave estrangeira vinculada à chave primária do cronograma? Ou é um relacionamento muitos para muitos. De qualquer maneira, não vejo a visualização conforme apropriado aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top