Formular für Datensatzeingabe

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formular für Datensatzeingabe

Re: Formular für Datensatzeingabe

von gogo » So, 26.12.2010 01:50

verknüpf du doch bitte die Tabellen wie du es für sinnvoll hälst.
Da müsste man wissen was Du genau von der DB haben willst.

Wenn Du einen Trainer pro Spiel und Mannschaft haben willst, dann mach die Tabelle einfach so:

Spiel_ID
Heimmannschaft (n:1 zu F_Mannschaft.Mannschafts_ID)
Trainer_Heimmannschaft (n:1 zu F_Trainer.Trainer_ID)
Tore_Heimmannschaft
Gastmannschaft (n:1 zu F_Mannschaft.Mannschafts_ID)
Trainer_Gastmannschaft (n:1 zu F_Trainer.Trainer_ID)
Tore_Gastmannschaft
veranstaltungs_ID
Saison
Datum
...

Die Verknüpfungen kannst Du übrigens komplett weglassen! DBen funktionieren auch ohne. Die Daten aus den abhängigen Tabellen holst Du Dir erst wenn Du die Abfragen machst.
Zum Eintragen der richtigen Trainer gibst Du am besten zur bestehenden F_Mannschaft noch das Feld aktueller_Trainer (n:1 zu F_Trainer.Trainer_ID) dazu. Dann kannst Du Dir bei der Mannschaft immer den aktuell eingestellten Trainer anzeigen lassen...
Eleganter wäre es, per SQL immer den letzten Trainer der Mannschaft zu ermitteln, dann fällt auch dieses Feld weg... wie man das dann macht ist mMn nach Geschmackssache.

bin jetzt erst mal im Urlaub...

g

Re: Formular für Datensatzeingabe

von gogo » Sa, 25.12.2010 13:31

Um die Abfragen will ich mir noch keine Gedanken machen
Das solltest Du aber wissen, bevor Du die DB machst, sonst erfasst Du dauernd Daten die Du gar nicht so oder in der Form brauchst, und vergisst das was Du brauchst.

F_Spiel ist sicher nicht 'falsch' eingebunden, das Hauptproblem wird die F_Verbindung sein, in der jetzigen Form hast Du dort pro Spiel n Datensätze, die Du dann wieder über die F_Spiel zueinander zuordnen musst. Ausserdem kann ja auch die Mannschaft in jedem Spiel "anders" sein . Du könntest Bayern-München 5 mal in der Mannschaftstabelle haben, jedes mal anders strukturiert, oder in der F_Verbindung, und auch in der F_Spiel, es kommt immer nur darauf an wie frei Du in Deiner DB sein willst, und wie kompliziert es sein darf...

Du musst selbst wissen wie detailliert am Ende die Informationen in der DB sein sollen und sie danach strukturieren.
gogo hat geschrieben:Heimmannschaft (n:1 zu F_Mannschaft.Mannschafts_ID)
Tore_Heimmannschaft
Gastmannschaft (n:1 zu F_Mannschaft.Mannschafts_ID)
Tore_Gastmannschaft


Wie macht man sowas. Habe ich da zwei Relationen auf eine Tabelle? Wie wird sowas umgesetzt? Ich bin nun leider erstmal unterwegs. Vielleicht kann ich später noch etwas daran arbeiten.
Ja das ist ganz normal, da Du ja zwangsläufig 2 Felder verwendest. Ein Fremdschlüssel ist da vollkommen unproblematisch. z.B: Ein Dokument hat eine Person die es erstellt hat, eine weitere die es geprüft hat, und dann wird er publiziert, z.B. von Person 1. Da ist dann die Personentabelle 3 mal mit dem Dokument verbunden, und 2 mal wird sogar auf den selben Datensatz verwiesen...
Eine Tabelle kannst Du auch mit sich selbst referenzieren. Wenn Du eine Liste von Personen hast und Person5 wird von Person3 betreut, dann schreibt man einfach in das Feld Betreuer die ID von Person3 - voilà.




g

Re: Formular für Datensatzeingabe

von gogo » Sa, 25.12.2010 02:32

würde eine Verbindung bestehen zwischen F_Spiel und eben den drei anderen: F_Trainer, F_Mannschaft & F_Saison.
Da Du für jedes Spiel einen Datensatz hast besteht diese Verbindung über die Schlüssel ja sowieso. Verbindungstabellen sind eigentlich nur notwendig wenn:

1. nicht klar ist wieviele Datensätze der "untergeordneten Tabelle" (F_Trainer, F_Mannschaft & F_Saison) an einem DS der F_Spiel dranhängen. - Wenn's nur je 2 sind, und die auch noch immer vorkommen (was bei einem stattgefundenen Spiel ja naturgemäß auch so ist ;) ) dann ist es strukturmässig warscheinlich günstiger (bzw übersichtlicher) die Verbindungstabellen wegzulassen und eben 2 Felder (statt einem) in der F_Spiel zu machen.

2. Wenn die Verbindung selbst "Eigenschaften" hat (z.B. Funktion des Trainers: Tormanntrainer, Spielertrainer, Headcoach...) ein Trainer kann ja mal so und mal so eingesetzt werden. Das lässt sich dann bestens in so einer Verbindungstabelle speichern.
Sicher kann man in der Tabelle F_Spiel mehr Details eintragen.
Ich wollte mit der Auflistung nur darauf hinweisen, wie zentral die F_Spiel ist.
Im Endeffet würde ich mir gerne Befehle schreiben, die mir Begegnungen bestimmer Trainer gegeneinander anzeigen.
Die Begegnung findet ja offensichtlich im Spiel statt - also ist es dann so irgendwie:
select * from F_Spiel where ( Trainer1 = 12 or Trainer1 = 20 ) AND ( Trainer2 = 12 or Trainer2 = 20 )


g

Re: Formular für Datensatzeingabe

von gogo » Sa, 25.12.2010 00:53

Die Tabelle F_Spiel scheint mir zu kurz ;)

Wenn's wahr ist, gibt's in einem Spiel 2 Mannschaften mit je n Trainern.
Tore und Gegentore gibt's nur aus der Sicht einer Mannschaft...

Am besten ist es warscheinlich, wenn Du die Spieletabelle so aufbaust:

Spiel_ID
Heimmannschaft (n:1 zu F_Mannschaft.Mannschafts_ID)
Tore_Heimmannschaft
Gastmannschaft (n:1 zu F_Mannschaft.Mannschafts_ID)
Tore_Gastmannschaft
veranstaltungs_ID
saison_ID
Datum
Austragungsort
Schiri
Wetter
Zuseher
Verletzte
Bemerkungen
...

Wenn Du immer nur einen oder 2 Trainer einträgst, dann würde ich die als Trainer1_Heimmannschaft, Trainer2_Heimmannschaft, Trainer1_Gastmannschaft und Trainer2_Gastmannschaft dazunehmen.

Wenn's mehr Trainer sind, oder diese auch mit unterschiedlicher Funktion erfasst werden sollen, dann empfiehlt sich eine Verbindungstabelle die so aufgebaut ist:

Verbinde_Trainer_ID
Spiel_ID (n:1 zu F_Spiel.Spiel_ID)
Trainer_ID (n:1 zu F_Trainer.Trainer_ID)
Mannschafts_ID (n:1 zu F_Mannschaft.Mannschafts_ID)
Funktion
Bemerkungen
...

Die Spiele kannst Du dann einfach in einem Formular erfassen das sich nur auf die F_Spiel bezieht, lediglich die Listeninhalte der Kombos (Listenfelder sind besser) beziehen sich auf die jeweiligen anderen Tabellen
Bei Verwendung einer Trainerverbindungstabelle kannst Du die Trainer erst nach dem Speichern des Satzes in der F_Spiel eintragen (brauchst ja eine gültige Spiele-ID) - daher startest Du diese Eingabe erst nachdem das Spiel angelegt wurde. Das kannst Du dann in einem Subformular machen, oder in einem ganz eigenständigen Formular.

g

Nach oben