Wie habt ihr das Datenbanktechnisch gelöst?
Problem:
Ein Gebäude hat x Forschungen und x Gebäude als Vorrausetzung, damit es gebaut werden kann.
Habt ihr bei der Datenbank nur 1 Feld für das "vorhergehend" benötigte Gebäude und rechnet es über alle zurück oder habt ihr dafür euch für eine Spalte entschieden, wo es linealisiert drin steht (1,2,5,6)?
Gebäude / Forschungen vorraussetzungen
gepostet vor 17 Jahre, 1 Monat von ThaDafinser
gepostet vor 17 Jahre, 1 Monat von tector
wenn du eine vorraussetzungen-spalte hast in der mehrere vorrausgesetzte gebäude drinne stehen, dann ist das ganze nicht normalisiert!
ich weiß, jetzt kommen wieder leute die meinen das wäre auch gar nicht nötig, aber ich finde es in diesem falle unlogisch es so zu machen.
also ich habe eine vorraussetzungen tabelle mit 3 spalten: tech, vorausgesetzter tech und das level (welches der vorausgesetzte tech haben muss). tech und vorausgesetzter tech sind fremdschlüsselspalten die auf die tabelle technologien verweisen.
benötigt ein tech mehrere verschiedene voraussetzungen, dann braucht man halt für jede voraussetzung eine separate zeile.
solltest du nur jeweils ein einzige vorraussetzung benötigen, kannst du das auch hierarchisch innerhalb der tabelle lösen.
bin aber mal gespannt wie es andere machen
ich weiß, jetzt kommen wieder leute die meinen das wäre auch gar nicht nötig, aber ich finde es in diesem falle unlogisch es so zu machen.
also ich habe eine vorraussetzungen tabelle mit 3 spalten: tech, vorausgesetzter tech und das level (welches der vorausgesetzte tech haben muss). tech und vorausgesetzter tech sind fremdschlüsselspalten die auf die tabelle technologien verweisen.
benötigt ein tech mehrere verschiedene voraussetzungen, dann braucht man halt für jede voraussetzung eine separate zeile.
solltest du nur jeweils ein einzige vorraussetzung benötigen, kannst du das auch hierarchisch innerhalb der tabelle lösen.
bin aber mal gespannt wie es andere machen
gepostet vor 17 Jahre, 1 Monat von ThaDafinser
normalisiert....naja das ist so eine philosophie, lassen wir die mal =)
derzeit habe ich eine einzelne spalte für forschung / gebäude vorraussetzung.
und wenn ich jetzt die einzelnen vorraussetzungen ausgeben möchte, müsste ich diese rekursiv zurückrechnen...
ich denke wenn man es einmal serialisiert alle in eine spalte schreibt, wäre es geschwindigkeits und abfragentechnisch schneller/einfacher....
derzeit habe ich eine einzelne spalte für forschung / gebäude vorraussetzung.
und wenn ich jetzt die einzelnen vorraussetzungen ausgeben möchte, müsste ich diese rekursiv zurückrechnen...
ich denke wenn man es einmal serialisiert alle in eine spalte schreibt, wäre es geschwindigkeits und abfragentechnisch schneller/einfacher....
gepostet vor 17 Jahre, 1 Monat von Todi42
Das "übliche" Vorgehen, bei n:m Beziehungen ist es dies mit einer Zwischentabelle zu realisieren. Der Vorteil ist, das man mit diesen Daten dann auch mit SQL arbeiten kann.
gepostet vor 17 Jahre, 1 Monat von Drezil
ich speicher die vorraussetzungen als bitmaps ab. So bekomme ich 64 Vorraussetzungen in ein int_64-feld. So gehen lediglich keine "stufen"-vorraussetzungen, aber dafür ist das prüfen ganz einfach mit:
gebäude.vorraussetzung & spieler.forschung = gebäude.vorraussetzung
ich find das so ganz praktisch, da man eh nicht dynamisch viele forschungen, sondern eher statisch viele forschungen, die manuell editiert werden.
ich hab im moment 5 forschungsfelder in der datenbank (=320 Forschungen max), von denen atm ca. 260-270 genutzt werden. Aber innerhalb von 5 minuten ist das auch erweitert (vererbung von datenbanktabellen, globale konstanten in php etc.)
gebäude.vorraussetzung & spieler.forschung = gebäude.vorraussetzung
ich find das so ganz praktisch, da man eh nicht dynamisch viele forschungen, sondern eher statisch viele forschungen, die manuell editiert werden.
ich hab im moment 5 forschungsfelder in der datenbank (=320 Forschungen max), von denen atm ca. 260-270 genutzt werden. Aber innerhalb von 5 minuten ist das auch erweitert (vererbung von datenbanktabellen, globale konstanten in php etc.)
gepostet vor 17 Jahre, 1 Monat von raufaser
Ich mach sowas auch mit einer Zwischentabelle.
Gruß,
Marc
Gruß,
Marc
gepostet vor 17 Jahre, 1 Monat von n26
Ich serialisiert in einer Spalte.
n26
n26
gepostet vor 17 Jahre, 1 Monat von Agmemon
Ich würde eigentlich auch eine Zwischentabelle bevorzugen, haben uns aber wegen der ursprünglich geplanten Komplexität, für einen Code entschieden. Das sieht dann ungefähr so aus: G:1:5|G:2:3|F:4:5
Der Buchstabe gibt den Typ der Vorraussetzung an, die erste Zahl die ID und die zweite Zahl die Stufe.
Der Buchstabe gibt den Typ der Vorraussetzung an, die erste Zahl die ID und die zweite Zahl die Stufe.
gepostet vor 17 Jahre, 1 Monat von Biki
Ich hatte solche Dinge auch alle in einer Spalte, bis FatalError in mein Team kam und mir die DB normalisierte
gepostet vor 17 Jahre, 1 Monat von Nightflyer
Ich hab Voraussetzungen nur in einem Array in einer include-Datei
gepostet vor 17 Jahre von Nuky
Früher hätt ich sowas "serialisiert", heute würd ichs normalisieren.
gepostet vor 17 Jahre von exception
Da sich die Voraussetzungen zur Laufzeit nicht ändern, habe ich sie fest in einem PHP-Array innerhalb der Gebäudeobjekte.
gepostet vor 17 Jahre von sami06
na ja, ich würds nicht in den code packen, denn wenn sich dann mal was ändert, muss man an den code (sei es was neues oder i was gering geändert)
ich habe ganz eff in die tabelle 6 weitere spalten (bzw. sogar 12) wie folgt
[alle informationen] - tech - stufe - tech - stufe - etc...
wobei ich tech bzw stufe durchnummeriere
und ob ich dann für eine der Vorraussetzungen wieder eine Vorraussetzung habe, ist mir egal, dass kann man da ja unter der tech. dann nachsehen...
mfg
topo
ich habe ganz eff in die tabelle 6 weitere spalten (bzw. sogar 12) wie folgt
[alle informationen] - tech - stufe - tech - stufe - etc...
wobei ich tech bzw stufe durchnummeriere
und ob ich dann für eine der Vorraussetzungen wieder eine Vorraussetzung habe, ist mir egal, dass kann man da ja unter der tech. dann nachsehen...
mfg
topo
gepostet vor 17 Jahre von Macavity
Wenn es sich dagegen nicht oft ändert, würde ich es eher in eine Include packen als in die DB zu laden. Ist schlicht effektiver.