Frage

Ich habe eine Datenbank, die die folgenden Beziehungen hat:

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.

Ich brauche eine Abfrage auszuführen, die auf eine Reihe von Werten aus Schedule basierend wählen müssen, wenn Transaction.TimeStamp innerhalb eines mitgelieferten Datum-Bereich liegt. Die Abfrage muss einen Wert von Schedule basierend auszuwählen, auf es ist Primärschlüssel. Der Primärschlüssel ist aus der Transaktion nicht nachvollziehbar.

Um dieses Problem zu beheben, habe ich beschlossen, eine Tabelle zu Link Transaktion zu erstellen DIREKT zu Schedule Primär.

Vor kurzem entdeckte ich Table Views - würde dies eine angemessene Situation eine machen Tabellenansicht"? Oder soll ich gerade eine ‚tatsächliche‘ Tabelle TransactionSchedule erstellen?

transactionSchedule
Transaction_ID    Schedule_ID

Mein Problem ist, ich verstehe nicht, die Besonderheiten, wenn eine Tabellenansicht ist nützlich / was die Vorteile sind.

Wird mit einer einzelnen Tabelle zu Trace Transaktions-> Zeitplan Overkill?

Wirklich eine allgemeine Anleitung mit diesem Problem würde sehr geschätzt werden.

EDIT : Diese Abfrage ist nur für das Abrufen von Daten, die bereits eingegeben wurde,

- Dank

War es hilfreich?

Lösung

Ich möchte Sie dringend auffordern, schnellstens den Preis aus dem Zeitplan direkt auf Kauf zu kopieren, wie Sie, dass ich einfügen. Auf diese Weise haben Sie Ihr Problem gelöst, und zur gleichen Zeit, von einem anderen Preis verhindert zu Lasten des Kunden werden später, wenn Sie versehentlich (oder absichtlich), um den Zeitplan zu ändern.

Was auf den Primärschlüssel des Zeitplan im Zusammenhang, und diese nicht von einem transation ist nachvollziehbar: das ein Zeichen von schlechtem Design ist. Ich meine, denken Sie darüber nach - Sie haben einen Zeitstempel in der Transaktion, ein Zeitplan definitionsgemäß in der Zeit gesetzt wird unter Verwendung eines von und zu Zeitstempel - warum können Sie nicht beziehen sie? AFAICS sollte Primärschlüssel Zeitplan item_id, from_timestamp, to_timestamp

Tabelle Ihres Zeitplan Unter der Annahme, hat ein aus und meine Abfrage zeitzustempeln wäre

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

Was sollten Sie verwenden, um eine Ansicht oder nicht - wirklich, es ist bis zu Ihnen. Ein Blick nicht besser funktioniert oder schlechter als eine Abfrage, ist der einzige Unterschied, dass die Definition in der Datenbank gespeichert ist. Die wichtigsten Vorteile der, die

  • können die Menschen die Definition wiederverwenden, ohne das Kopieren der Abfrage (und es bis Messing), die
  • Sie können das Schema zu einem gewissen Grad und auszublenden ändern, die von der Anwendung zur Verfügung gestellt Sie die Ansicht entsprechend aktualisieren (dies letztere Vorteil wird oft überschätzt)

Andere Tipps

Kann nicht der Transaktionsdatensatz einen Fremdschlüssel mit dem Zeitplan Primärschlüssel verknüpft hat? oder ist es eine many-to-many-Beziehung. So oder so ich nicht sehe Ansicht gegebenenfalls hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top