Mehrdimensionale SQL Datenbank erstellen

...komplette Frage anzeigen

3 Antworten

Warum willst du diese umständliche Logik auf deine Datenbank übertragen? In der Datenbank legst du dir eine Spalte für das Datum an und trägst dort 2012-10-17 ein. Zusätzlich legst du dir noch Spalten für die Anfangs- und Endzeit an und speicherst dort die Zeit.

Danach kannst du dann ganz leicht suchen, sortieren und dir auch leicht in der Abfrage gleich die Differenz der Anfang- und Endzeit berechnen lassen. Deine jetzige Logik mit den Ordnern ist in einer relationalen Datenbank absolut unnötig und schwer zu handhaben.

Dem kann ich nur zustimmen. die Ordnerstruktur ist für eine SQL-Datenbank die falsche Herangehensweise.

Lege EINE Tabelle an, speichere darin die Start- und Endzeit, das genutzte Fahrzeug, Start- und Endkilometerstand, und den Text. Zusammen mit einer eindeutigen ID wären das dann sieben Tabellenspalten.

Alle anderen Werte wie Stunden und gefahrene Kilometer würde ich dann ggf. beim auslesen berechnen lassen. Das hängt aber letztlich von der Menge der Daten und der Performance des DB-Servers ab.

Falls du Fragen hast, kannst du dich gern melden.

0
@derkletterer

…o ja, ich habe Fragen, Tausende Fragen ;-) PHP klappt eigentlich sehr gut, nur mit SQL Datenbanken hab ich noch nichts am Hut gehabt. Ok, habe jetzt eine Datenbank namens ZEITEN, darin enthalten 4 Tabellen mit: Fahrzeug, Km, Trailer und Zeit. Bei Fahrzeug hab ich: Datum, LKW1, LKW2… bis LKW9 und Leer. Bei Trailer hab ich: Datum, trai1, trai2… bis trai9 und Leer. Bei Km hab ich Datum, Anfang, Ende und Summe. Bei Zeit hab ich: Datum, Anfang, Ende, Summe und Zusatz.

NUR eine Tabelle Lesen oder Beschreiben is kein Problem aber jetzt hab ich 4, das ist ein Problem denn eigentlich hab ich von SQL überhaupt keine Ahnung, aber es gibt ja GOOGLE und so nette Leute wie hier in gutefrage.net

Was ich aber bis jetzt gefunden habe bezieht sich immer auf eine Tabelle, nicht auf mehrere. Wenn du mir also dahingehend etwas unter die Arme greifen könntest wäre das wunderbar für mich. Natürlich nur wenn du auch etwas Zeit und vor allem auch Lust hast. Vielen Dank schon mal, auch fürs Lesen ;-)

0

Schritt 1: Tabellen anlegen

Du erzeugst eine Tabelle mit drei Spalten:

  1. Nummer
  2. ElternNummer
  3. Name

Die "Nummer" ist dein Index, die "Elternnummer" weist auf den übergeordneten Ordner (also die "Nummer" des übergeordneten Ordners) hin. Außerdem brauchst du noch die Tabelle "Zeiten", die etwa so aussehen kann:

  1. OrdnerNummer
  2. Zeit
  3. [weitere Felder]

Die "OrdnerNummer" zeigt auf die "Nummer" in der Tabelle "Ordner".

Damit kannst du faktisch endlose Rekursionen - also endlose Unterordner - erzeugen. (Ja, es wäre auch möglich, das bis auf Stunden oder Minuten weiterzutreiben.)

Da uns aber drei Ebenen (Jahr, Monat, Tag) ausreichen, machen wir es mit einer einfachen Abfrage.

Schritt 2: Abfrage basteln

SELECT t3.Name + '.' + t2.Name + '.' + t1.Name + ' = ' + z.Zeit
FROM 
    Ordner t1
    JOIN Ordner t2
    ON t1.Nummer = t2.ElterNnummer
    JOIN Ordner t3
    ON t2.Nummer = t3.ElterNnummer
    JOIN Zeiten z
    ON t3.Nummer = z.OrdnerNummer
WHERE
    t1.Name = '2012' -- Jahr
    AND t2.Name = '1' -- Monat
    AND t3.Name = '25' -- Tag

Mit dieser "WHERE"-Klausel bekommst du alle Zeiten aus der Tabelle "Zeiten" für den 25. Januar 2012. Ohne "WHERE"-Klausel gibt's alle Zeiten aller Ordner. Auch Einschränkungen auf "nur Jahr" oder "nur Monat" sind möglich, wenn du einfach die enstprechenden Teile der Klausel auslässt.

Hinweis

Überlege dir, wie du deine Zeiten speicherst. Es gibt endlos viele Möglichkeiten, folglich musst du ggf. auch die Abfrage anpassen.

Noch'n Tipp

Mit einem besseren DBMS kannst du die ganze Sache auf wenige Zeilen verkürzen und den Performancefresser Rekursion optimieren. Hier wäre CTE das Zauberwort, das die Augen leuchten (und das Hirn weniger dampfen) lässt. Aber für die gelegentlichen Abfragen, die du vermutlich machen wirst, sollte es wohl reichen...

Sorry, aber damit kann ich (NOCH) nichts anfangen, leider. Aber dennoch ein recht herzliches danke für die Antwort.

0

Hallo Was du suchst sind Verbindungen zwischen den Tabellen. Dieses Thema hier zu erläutern ist echt schwer, da es viele Aspekte zu berücksichtigen gilt.

Tipps für die Googlesuche: - Erläuterungen zum Thema Entity-Relationship-Modell (ER-Modell). - Degree einer Relationship (Grad einer Beziehung) - Primärschlüsse, Sekundärschlüssel

Diese Seite liefert eine gute Übersicht: http://www.roro-seiten.de/info/db/03ERModell/ERModell.html

Ich empfehle die Lektüre "MySQL Kochbuch" von O'REILLY

Was möchtest Du wissen?