php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 02-08-2012, 15:39
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard bitte checkt mein Design

Hallo Leute,

Ich arbeite momentan an einem Projekt und bin mir nicht sicher ob mein DB-Design dazu passt.

Die Aufgabe:
1. Der User kann eine Zugfahrt eintragen, also eine Zeile in "Train way" schreiben. Dabei wird die Spalte "t_jsonprops" mit json Daten gefüllt (diese Daten werde ich nicht Filtern oder zur Suche nutzen)
2. Die Zugfahrt kann mehrere Stationen haben, also wird jede Station in die Tabelle "Stations" geschrieben

Könntet Ihr bitte schauen, ob das was ich aufgebaut habe optimal ist?
Falls das Bild nicht verständlich ist, sagt bescheid und ich werds in einem anderen Programm aufbauen.

Vielen Dank im Voraus,
Grüsse - Mischa
Miniaturansicht angehängter Grafiken
bitte checkt mein Design-2hrzl2t.png  
Mit Zitat antworten
  #2 (permalink)  
Alt 03-08-2012, 19:29
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Sieht ganz brauchbar aus.
Ich würde die Tabellen aber anders benennen:
Trainway -> Ticket
Stations -> Route

Wärend ich das Schreibe fällt mir auf, dass es keinen Bezug zum Zug selbst gibt.
Eine Tabelle Trains, die mit Stations(Route) verknüpft ist würde ich noch dazu nehmen.

Dann würde ich mir die geforderten Abfragen anschauen und überlegen ob die mit der Tabellenstruktur lösbar sind.
Mit Zitat antworten
  #3 (permalink)  
Alt 03-08-2012, 19:44
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi - vielen Dank, das mit den Namen ist echt verwirrend
ja den Zug gibts noch nicht - also es ist nicht teil des Projekts.

Was ich noch etwas schwer finde, ist die Location Namen direkt in der Ausgabe zu zeigen.
D.h. wenn ich folgendes Mache:
Select * FROM Ticket as t LEFT JOIN Stations as s ON t.t_id=s.s_id WHERE 1

so in der ausgabe hätte ich dann unter anderem s.s_lid_from und s.s_lid_to,
was ja bezüge zu den l_id sind (in der Location Tabelle)
Wie kann ich es aber machen, dass direkt die dazugehörigen Namen aus der Locations Tabelle rausgezogen werden?

Was ich mir überlegt habe ist folgendes:
PHP-Code:
Select *,
   (
Select l_name FROM Locations WHERE l_id s.s_lid_from LIMIT 0,1) as from
   
(Select l_name FROM Locations WHERE l_id s.s_lid_to LIMIT 0,1) as to
FROM Ticket 
as t LEFT JOIN Stations as s ON t.t_id=s.s_id WHERE 1 
Gibts da ne bessere Lösung?
Mit Zitat antworten
  #4 (permalink)  
Alt 03-08-2012, 20:26
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Du kannst Joins verketten. Das hat dann in etwa den Effekt vom Ordner im Ordner im Ordner...

Dann schau nach, von welcher Tabelle es am sinnvollsten ist, mit der Suche zu beginnen.
Denn du hast eine 1:n Relation: User:Trainway
und eine n:n Relation: Trainway:Locations

Und was ist mit Stations?
Das ist die n:n Verbindungs-Tabelle zwischen Trainway:Locations
Das Ergibt die Relation(en):
Trainway -->1:n-->Stations<--n:1<--Locations
und
User -->1:n-->Trainway

Wenn das soweit klar ist fällt auf, das es *meistens* am sinnvollsten ist, mit der Suche bei Stations anzufangen, weil die die meisten Keys zum verknüpfen bereit stellt.
PHP-Code:
SELECT ... 
FROM Stations .... 
LEFT JOIN Trainway
  ON Stations
.... = Trainway...
LEFT JOIN Locations
 ON Stations
... = Locations
WHERE Stations
.Trainway_T_id=.... AND s_id_from=... 
Wenn du es verkettest und mit Trainway anfängst, dann so:
PHP-Code:
SELECT ....
FROM Trainway
LEFT JOIN Stations
  ON Trainway
... = Stations....
LEFT JOIN Locations
  ON Stations
... = Locations... 
Was davon am Sinnvollsten ist, kommt halt drauf an, was man braucht
Mit Zitat antworten
  #5 (permalink)  
Alt 03-08-2012, 20:31
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok - aber ich habe 2 spalten in der Tab Stations die eine Beziehung mit Locations haben - also die "from" und die "to" und die sind immer unterschiedlich - wie krieg ich dann in einer Zeile das Ergebnisse mit den Verkettungen hin, sodass beide Werte auszulesen sind?
Mit Zitat antworten
  #6 (permalink)  
Alt 03-08-2012, 20:35
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Dann Joinst du die selbe Tabelle einfach zwei mal dran

PHP-Code:
LEFT JOIN Locations as l_from
  on 
....
LEFT JOIN Locations as l_to
  on 
.... 
Mit Zitat antworten
  #7 (permalink)  
Alt 03-08-2012, 21:33
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

aaaah - das ist gut
und ist das schneller als es so zu machen, wie ich es gemacht habe?
(doppelter Select am Anfang)
Mit Zitat antworten
  #8 (permalink)  
Alt 03-08-2012, 21:41
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Join ist bestimmt besser optimiert als subselect.
Ansonsten macht dir ein Script, das ein paar zig/hunderttausend Einträge erstellt und teste das aus.
Wenn du dein Projekt ernsthaft weiter verfolgst, kommst du da eh nicht drum herum.
Außerdem macht es viel mehr Spaß mit einer Datenbank zu arbeiten, wo auch ordentlich was drin ist
Mit Zitat antworten
  #9 (permalink)  
Alt 03-08-2012, 21:43
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hast auf jeden fall Recht!!!

vielen vielen Dank!
Mit Zitat antworten
  #10 (permalink)  
Alt 04-08-2012, 10:38
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi steffomia,

ich hab da noch eine Frage, die etwas Kopf braucht

Sagen wir jemand fährt und hat 8 Stationen
A,B,C,D,E,F,G,H
davon sind 2 Hauptstationen (A und H) und 6 Zwischenhalte (B-G)
Normal würde ich jetzt in der Tab Stations tatsächlich 8 Zeilen eintragen, also z.B. "von A bis H, als Typ 1", "von A bis B als Typ 2", "von B bis C als Typ 2", "von C bis D als Typ 2" usw.
Aber Mathematisch macht es kein Sinn, denn man könnte auch mit n/2 Zeilen auskommen - also n=8. Dann hätte ich
"von A bis H, als Typ 1", "von B bis C als Typ 2", "von D bis E als Typ 2", "von F bis G als Typ 2". Und wenn dieses richtig geordnet sind, weiss man dass die erste Station A ist und dass zwischen A und B eine Strecke liegen muss.

Das wäre aber viel schwieriger und zeitaufwendiger für die Abfrage. (Wie weiss ich noch selber nicht genau )

Aber generell würdest du eher den 1.ten oder 2.ten Weg gehen?

Danke vielmals
Grüsse - Mischa
Mit Zitat antworten
  #11 (permalink)  
Alt 04-08-2012, 14:03
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Mischap Beitrag anzeigen
Hi steffomia,

ich hab da noch eine Frage, die etwas Kopf braucht

Sagen wir jemand fährt und hat 8 Stationen
A,B,C,D,E,F,G,H
davon sind 2 Hauptstationen (A und H) und 6 Zwischenhalte (B-G)
Normal würde ich jetzt in der Tab Stations tatsächlich 8 Zeilen eintragen, also z.B. "von A bis H, als Typ 1", "von A bis B als Typ 2", "von B bis C als Typ 2", "von C bis D als Typ 2" usw.
Aber Mathematisch macht es kein Sinn, denn man könnte auch mit n/2 Zeilen auskommen - also n=8. Dann hätte ich
"von A bis H, als Typ 1", "von B bis C als Typ 2", "von D bis E als Typ 2", "von F bis G als Typ 2". Und wenn dieses richtig geordnet sind, weiss man dass die erste Station A ist und dass zwischen A und B eine Strecke liegen muss.

Das wäre aber viel schwieriger und zeitaufwendiger für die Abfrage. (Wie weiss ich noch selber nicht genau )

Aber generell würdest du eher den 1.ten oder 2.ten Weg gehen?

Danke vielmals
Grüsse - Mischa
Interessantes Thema das...

Generell sehe ich einen wesentlichen Unterschied zwischen Stationen (A,B,...) und Streckenabschnitten(A-B, B-C,A-H...).
Ich denke auch, das sollte man -wie du schon sagst- unbedingt differenzieren.
Dann sollte man wissen, welche Stationen eine Station direkt und ohne Zwischenstationen erreichen kann.
Die Wegstrecke zwischen den Stationen ist bestimmt auch wichtig.
Wenn die Wegstrecken noch mit unterschiedlichen Zügen befahren werden können, oder nur mit bestimmten Zügen befahrbar sind, darf das auch nicht fehlen.
Damit die Wegstrecken leichter identifiziert gefunden werden können, sollte eine id (Primary key) nicht fehlen.

Das alles zusammen kann man in eine Tabelle Packen, namens..."pathes" vielleicht. Denn den "Pathfinder" wirst du sicher auch noch brauchen.

Die Tabelle sähe dann so aus:
ID, StationId, accessibleStadionId, Distance [, allowedTrainTypeId, price]

Und könnte (ohne TrainType und price) folgenden Inhalt haben:
1 | 1 | 2 | 2500
2 | 2 | 1 | 2500
3 | 2 | 3 | 4300
4 | 3 | 2 | 4300
5 | 3 | 4 | 2109
...

Dann setzt du einen unique key auf Kombination [StationId, accessibleStadionId] oder [StationId, accessibleStadionId, allowedTrainTypeId] um doppelte Einträge zu vermeiden.

Wenn es nun ein einziges Gleis gibt, "hangelst" du dich einfach in einer Schleife von Station bis Station, rechnest die Strecke -und vielleicht Preise- zusammen, bis der Zielbahnhof erreicht ist.

Wenn du mehr als ein Gleis hast, wirst du wohl einen Pathfinder brauchen, in den du die Tabelle lädst und der dir dann die Strecke berechnent. Wie man den(Pathfinder) aber benutzt, da bin ich überfragt.

EDIT:
Gerade gefunden, Pathfinder:
http://waher.net/archives/313
Der simpel und lässt sich vielleicht auf deine Bedürfnisse anpassen.
__________________
Wer keine Arbeit hat, der macht sich welche
XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN

Geändert von steffomia (04-08-2012 um 14:14 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 04-08-2012, 16:39
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das ist gut, jedoch werde ich hier nie die Strecke suchen müssen, d.h. der Pathfinder käme dabei nicht ins Spiel, wenn ich es aber brauchen würde, dann ist es ja eine super Sache.

Wenn man das jetzt ohne Streckensuche betrachtet, hätte ich wieder n Einträge in der Stations Tabelle und noch weitere n in der Strecken Tabelle.

Ich glaube das wäre hier etwas uneffizient, oder was meinst du?
Die Streckenlänge könnte man dann auch in die Stations Tabelle stecken
Mit Zitat antworten
  #13 (permalink)  
Alt 04-08-2012, 17:06
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Mischap Beitrag anzeigen
das ist gut, jedoch werde ich hier nie die Strecke suchen müssen, d.h. der Pathfinder käme dabei nicht ins Spiel, wenn ich es aber brauchen würde, dann ist es ja eine super Sache.

Wenn man das jetzt ohne Streckensuche betrachtet, hätte ich wieder n Einträge in der Stations Tabelle und noch weitere n in der Strecken Tabelle.

Ich glaube das wäre hier etwas uneffizient, oder was meinst du?
Die Streckenlänge könnte man dann auch in die Stations Tabelle stecken
Natürlich, die brauchst du dann nicht. Da von- und zu Station in der Tabelle steht, passt der weg da ja bestens rein - wo auch sonst.
Die Stations-Tabelle ist ja auch eigentlich eine Strecken-Tabelle und die Location-Tabelle ist eigentlich eine Station Tabelle.

Dann musst du nur noch die Stationen auf der Wegstrecke raus suchen und den Weg zusammen rechnen.
Ich wette, die Aufgabe ist, das in einem Select zu tun?!
__________________
Wer keine Arbeit hat, der macht sich welche
XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN
Mit Zitat antworten
  #14 (permalink)  
Alt 04-08-2012, 17:16
Mischap
 Registrierter Benutzer
Links : Onlinestatus : Mischap ist offline
Registriert seit: Jun 2006
Beiträge: 29
Mischap ist zur Zeit noch ein unbeschriebenes Blatt
Standard

genau!
Mit Zitat antworten
  #15 (permalink)  
Alt 04-08-2012, 18:02
Benutzerbild von steffomia steffomia
 Registrierter Benutzer
Links : Onlinestatus : steffomia ist offline
Registriert seit: Aug 2012
Beiträge: 40
steffomia befindet sich auf einem aufstrebenden Ast
Standard

Sind denn die einzelnen Wegpunkte/Stationen bekannt?
__________________
Wer keine Arbeit hat, der macht sich welche
XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mein neues Design Kropff User pages 16 24-09-2010 13:49
Wie schaut mein Design aus? Wernch User pages 7 29-01-2008 08:28
Suche jemand der mein Design slicen kann Infernal Jobgesuche 0 19-09-2006 18:37
Mein neues Design billiejoe90 User pages 13 26-05-2005 12:26
Wie findet ihr mein Homepage Design?? CYP2K User pages 9 10-05-2004 15:47

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:03 Uhr.