| Autor |
Beitrag |
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 11.01.08 16:30
Hallo, ich hab mal wieder eine Frage (Datenbanktheorie):
(Es geht wieder um mein Auswertprogramm für den Schützenverein)
Ist das sinnvoll, wenn ein Fremdschlüssel (selber Wert) in einer Tabelle 1000e Male vorkommt? Oder soll ich doch lieber mehrere Tabellen machen, so dass ich mir dann den Fremdschlüssel sparen kann?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 11.01.08 20:53
Wenn ich dich richtig verstehe, nein.
_________________ Markus Kinzler.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 11.01.08 22:38
also nochmal mkinzler, vllt habe ich meine Frage jetzt präzisiert:
wenn der gleiche Wert 1000e Male in einem Feld (als Fremdschlüssel) vorkommt, ist es sinnvoller mehrere Datenbanktabellen zu erstellen um sich das Feld zu sparen?
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 12.01.08 01:01
Es ist doch immer wieder schön, wenn jemand auf eine Entweder-Oder-Frage mit Ja antwortet
Jakob Schöttl hat folgendes geschrieben: | also nochmal mkinzler, vllt habe ich meine Frage jetzt präzisiert:
wenn der gleiche Wert 1000e Male in einem Feld (als Fremdschlüssel) vorkommt, ist es sinnvoller mehrere Datenbanktabellen zu erstellen um sich das Feld zu sparen? |
Stelle am Besten mal Deine Situation vor, denn es hängt natürlich von der Datenstruktur und den eigentlich Daten ab.Wenn bei mehreren Millionen Datensätzen in ein paar Tausend davon im selben Feld mal dasselbe steht, ist es nicht gleich sinnvoll, das zu normalisieren  .
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Sa 12.01.08 13:00
Es geht wieder um mein Auswertprogramm für den Schützenverein.
Es gibt eine Tabelle Schiessen wo die ganzen Schiessen eingetragen sind, alle paar Wochen ist wieder ein weiteres Schiessen (=Wettbewerb).
in der Tabelle Treffer werden alle Einschüsse, die ein Schütze auf die Scheibe gemacht hat gespeichert (Ringwert, Teiler, X-Position und Y-Position).
zu jedem Datensatz in Treffer gehört also die Nummer des Schützen! Da jeder Schütze ungefähr 60 Schuss abgibt sind jedem Schützen in der Treffer-tabelle 60 Datensätze zugeordnet.
Quelltext 1: 2: 3: 4: 5: 6: 7:
| SchützenNr | Ringwert (Ringwert gibt an wie gut der Schuss ist) 1 | 10 1 | 9 1 | 6 1 | 8 1 | 8 ... |
jetzt kommt also das Feld SchützenNr schon mal 60 mal genau gleich vor. Das ist aber noch nicht so schlimm denke ich.
Jetzt will ich eine Treffer-Tabelle für ALLE Schiessen (-> Neues Feld für Treffer-Tabelle: SchiessenNr)!
Aber wenn jetzt 100 Schützen bei einem Schiessen teilnehmen, dann steht 100 x 60 = 6000 Mal die gleiche SchiessenNr in der Treffer-Tabelle untereinander.
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Sa 12.01.08 13:04
Jakob Schöttl hat folgendes geschrieben: | also nochmal mkinzler, vllt habe ich meine Frage jetzt präzisiert:
wenn der gleiche Wert 1000e Male in einem Feld (als Fremdschlüssel) vorkommt, ist es sinnvoller mehrere Datenbanktabellen zu erstellen um sich das Feld zu sparen? |
Hallo, mal was ganz nicht delphimässiges: irgendwo stand was von Treffern (kann auch woanders gewesen sein), aber musst du den für jeden einzelnen Treffer einen Datensatz anlegen? Ich habe schon unter verschiedensten Bedingungen geschossen, aber immer 5 oder 10 Schuss, in meinem ganzen Leben noch nicht einzeln. Du könntest also "Schiessergebnisse" verwalten.
Gruss Reinhard
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Sa 12.01.08 13:15
@Reinhard: also bei uns sind es manchmal 20er serien, oder auch bloß 10er (könnte aber alles sein!), jedenfalls will ich für jeden Treffer einen einzelnen Datensatz haben, weil sonst leere Felder enstehen können, wenn ich in einen Datensatz alle Treffer schreibe.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 12.01.08 14:22
Also habe ich es richtig verstanden. Meine Antwort bezog sich auf den ersten Teil. Natürlich könnte man für jeden Wettbewerb eine neue Tabelle anlegen. Würde ich aber nicht. wenn du nun am Ende des Jahres eine Auswertung über alle Wettbewerbe machen willst, wäre das sehr umständlich. Ich nehme ja an, dass in der Treffer-Tabelle noch eine Referenz auf das Schiessen befindet.
_________________ Markus Kinzler.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Sa 12.01.08 14:54
mkinzler hat folgendes geschrieben: | | Also habe ich es richtig verstanden. Meine Antwort bezog sich auf den ersten Teil. Natürlich könnte man für jeden Wettbewerb eine neue Tabelle anlegen. Würde ich aber nicht. wenn du nun am Ende des Jahres eine Auswertung über alle Wettbewerbe machen willst, wäre das sehr umständlich. |
ja genau, dann mache ich alles in einer Datenbank! Außerdem hab ich mal gerechnet, und auf diese Weise ist die Tabelle auch nur ein paar kB größer...
mkinzler hat folgendes geschrieben: | | Ich nehme ja an, dass in der Treffer-Tabelle noch eine Referenz auf das Schiessen befindet. |
Richtig, daran denk ich natürlich.
also Vielen Dank mkinzler.
|
|
alex517
      
Beiträge: 60
D7Ent, FB, FIBPlus
|
Verfasst: Sa 12.01.08 15:37
Hallo Jakob,
Jakob Schöttl hat folgendes geschrieben: |
mkinzler hat folgendes geschrieben: | | Ich nehme ja an, dass in der Treffer-Tabelle noch eine Referenz auf das Schiessen befindet. |
Richtig, daran denk ich natürlich. |
Ich würde die Treffer nicht direkt auf das Schiessen referenzieren, sondern die Struktur weiter ausbauen.
Gründe:
- Auswertung einer Serie, dazu müssen die Treffer gruppiert werden
- Womit, worauf und wieviel Mal soll und wurde geschossen
- Auswertungen getrennt nach Waffen
- Nicht alle in der Tabelle Schuetzen nehmen an jedem Schiessen teil, dashalb sollte eine Teilnehmer-Tabelle
vorhanden sein, in die alle gemeldeten Teilnehmer am Schiessen eingetragen werden.
Danach erst ist es möglich die Serien und dann die Treffer zu erfassen.
Im Anhang die entsprechende Struktur.
alex
Einloggen, um Attachments anzusehen!
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Sa 12.01.08 15:49
Danke alex, aber meine beschreibung war sowieso eine sehr vereinfachte darstellung.
ich habs mir schon so ähnlich gedacht, wie du sagst (Doku im Anhang; Word mit Gliederungsansicht)
mit welchem Prog hast du übrigens dein Diagramm erstellt?
Einloggen, um Attachments anzusehen!
|
|
alex517
      
Beiträge: 60
D7Ent, FB, FIBPlus
|
Verfasst: Sa 12.01.08 16:09
| Zitat: | Danke alex, aber meine beschreibung war sowieso eine sehr vereinfachte darstellung.
ich habs mir schon so ähnlich gedacht, wie du sagst (Doku im Anhang; Word mit Gliederungsansicht)
|
Gut, du hast dir schon paar mehr Gedanken gemacht..
| Zitat: | | mit welchem Prog hast du übrigens dein Diagramm erstellt? |
Mit IBExpert (Vollversion).
Alex
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 12.01.08 16:31
wo hast du das problem? eine datenbank ist ja dafür da und dafür gemacht, dass sie einige millionen/milliarden datensätze verwalten kann. du kannst ihr also ruhig vertrauen.
eine tabelle mit dem aufbau {@schütze; @wettbewerb; @Serie; @Scheibe; @Schussnummer; @Waffe; treffer, koordinate, etc.} ist durchaus in ordnung. dagegen entspricht das gar nicht der denke, für jeden wettbewerb eigene tabellen zu erstellen... diese werden mit einem primärschlüssel in einer eigenen tabelle verwaltet.. {@WettbewerbNr; Wettbewerb; Datum; ...} und gut is es. <HTH>
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: So 13.01.08 18:23
Grenzgaenger hat folgendes geschrieben: | | wo hast du das problem? eine datenbank ist ja dafür da und dafür gemacht, dass sie einige millionen/milliarden datensätze verwalten kann. du kannst ihr also ruhig vertrauen. |
ja, hat sich also erledigt.
|
|