Frage

Ich fürchte, ich weiß nicht, was ich tue.

1:

habe ich eine Tabelle namens ticket, die eine Spalte total genannt hat. Wenn die Gesamt aktualisiere Ich möchte eine Aufzeichnung davon (alt insgesamt, etc.) halten, so dass ich die total Spalte entfernen entschieden und erstellen die eine Tabelle namens ticket_total mit Spalten ticket_id, total und datetime (die jüngsten natürlich "aktuelle" insgesamt).

oder

2:

Dann wurde mir klar, dass ich später meinen Kunden die Möglichkeit, will geben Karten von total zu sortieren, oder Pull-Berichten, die die Summen aggregieren, etc. So entschied ich mich, anstatt die total Spalt auf ticket zurück zu setzen und zu ändern die total Spalte direkt, wenn die Gesamt aktualisiert wird, aber zuerst eine ticket_total Reihe als Aufzeichnung des vorherigen total erstellen.

Es scheint, dass die Version 2 wäre sehr leistungsfähig sein, weil ich nicht brauchen würde die damit verbundene ticket_total Tabelle so viel zu fragen, aber ich frage mich, was Sie Gurus DB da draußen denken. Ich bin nur Datenbank-Design Lernen und Angst ich nie es gut sein würde.

War es hilfreich?

Lösung

Ich würde mit der Option gehen 2, dass Sie vorgeschlagen haben.

So stellen Sie sicher, dass Sie das Update (von Ticket) tun + Insert (in ticket_total) in einer Transaktion, um sicherzustellen, dass die Integrität beibehalten wird.

Andere Tipps

Ihre zweite Alternative ist schneller, aber wenn Sie Berichte über historische Werte der Gesamt erstellen möchten, sollten Sie eine separate Tabelle haben soll, wo Sie den Wert speichern Sie ersetzen zusammen mit einem Zeitstempel. Diese Art der Tabelle wird als ein Audit-Tabelle .

Re: „Effizienz“ - am besten ist es, nicht zu viel über Datenbank Effizienz zu Beginn eines Projektes kümmern. Vorzeitige Optimierung ist ein häufiger Fehler zu vermeiden.

ist besser Ihre Bedürfnisse und Design, um sie zu konzentrieren. Später können Sie testen, ob in dem die Performance-Engpässe sind und die Arbeit an ihrer Lösung.

Für kleinere Datenbanken (Zehntausende von Zeilen), auch „ineffizient“ Anfragen gehen oft sehr schnell gegeben heutige Server und Software.

Keep it simple Ich schlage vor, dass Sie Kombinationstasten zu vermeiden und Überlastungen Tabelle Semantik, wenn Sie wirklich die Notwendigkeit haben.

Vorschlag Sie haben zwei Arten von Daten:. Aktueller Ticket-Informationen und eine History-Tabelle für alte "total" Werte

So Ihre ver 2 würde bevorzugt werden.

ticket
  id
  field_a
  field_b
  total    # current_total

ticket_total  # history of ticket total field
  id
  ticket_id
  total
  create_time

Auch "total" klingt wie eine Ansammlung von etwas. Ich schlage vor, dass Sie versuchen, mit einem Feldnamen zu entwickeln, die mehr beschreibend. - Was ist das Feld insgesamt? "Total_worktime"?

hinzugefügt Denken Sie daran, Indizes für die Tabellen hinzuzufügen. Index von etwas, dass Sie für Funde verwenden. Zum Beispiel hat die Tickettabelle einen customer_id hat? Stellen Sie sicher, dass es indiziert.

würde ich einen Blick macht ticket_total, keinen Tisch. Ich würde eine andere Ansicht ticket_current schaffen, wo ich die Karten nach dem Endtermin filtern würde, das heißt, wenn das Ticket Tabelle Dual verkeilt auf ticket_id und Datumzeit ist. Wenn nicht, außer Acht lassen, dass im letzten Teil.

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