[MySQL]: Tabellenansicht oder aktuelle Tabelle. (Tracing einen Primärschlüssel)
-
22-09-2019 - |
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
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.