Question

J'ai une base de données qui a les relations suivantes:

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.

Je dois exécuter une requête qui doit sélectionner une série de valeurs de l'annexe sur la base si Transaction.TimeStamp est à une date gamme fournie. La requête doit sélectionner une valeur de l'annexe basée sur sa clé primaire. La clé primaire n'est pas la traçabilité de la transaction.

Pour résoudre ce problème, j'ai décidé de créer une table pour lier transaction directement à la primaire de l'annexe.

Récemment, je découvert Tableau Vues - serait-ce une situation appropriée pour faire une Table "vue"? Ou devrais-je simplement créer une table « réelle » TransactionSchedule?

transactionSchedule
Transaction_ID    Schedule_ID

Mon problème est que je ne comprends pas les détails quand une vue de tableau est utile / quels sont les avantages.

Le fait d'avoir une table individuelle à Trace Transaction-> Liste Overkill?

vraiment de directives générales à ce problème serait très apprécié.

EDIT : cette requête est seulement pour récupérer les données qui ont déjà été entrées

- merci

Était-ce utile?

La solution

Je ne saurais trop vous inciter à copier le prix du programme directement d'achat dès que vous insérez cela. De cette façon, vous avez résolu votre problème, et en même temps, empêché d'un prix différent étant facturé au client plus tard si vous avez accidentellement (ou intentionnellement) modifier le calendrier.

En ce qui concerne relatives à la clé primaire de l'annexe, et ce ne pas être traçable à partir d'une transation: qui est un signe de mauvaise conception. Je veux dire, penser - vous avez un horodatage dans la transaction, un calendrier par définition est placé dans le temps à l'aide d'un horodatage à partir et - pourquoi ne pouvez pas vous les rapporter? AFAICS, clé primaire de l'annexe doit être item_id, from_timestamp, to_timestamp

En supposant que votre table de planification a partir et d'horodater Ma requête serait

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

En ce qui concerne, si vous utilisez une vue ou non - vraiment, il est à vous. Un point de vue ne fonctionne pas mieux ou pire qu'une requête, la seule différence est que la définition est stockée dans la base de données. Les principaux avantages qui en découlent sont

  • les gens peuvent réutiliser la définition sans copier la requête (et chambouler), le
  • vous pouvez modifier le schéma dans une certaine mesure et se cacher que de l'application à condition que vous mettez à jour la vue en conséquence (ce dernier avantage est souvent surestimée)

Autres conseils

peut-il pas l'enregistrement des transactions ont une clé étrangère liée à la clé primaire de calendrier? ou est-il un grand nombre à plusieurs. De toute façon je ne vois pas vue selon le cas ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top