PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bastelfreed vom Peinet ^^


Pained_Soul
03.02.14, 00:02:58
Wie so der ein oder andere bestimmt mitbekommen hat, bastel ich ab und an ganz gern bissl rum :)

aktuell geht es um Datenbank/SQL (ganz einfach das ding von open office weil ich grad faul war ^^)

So weit so gut, jetzt habe ich mir gedacht ich möchte - ähnlich wie in minecraft - items aus items herstellen..
somit gibts zwei tabellen einmal rezepte und einmal items..

in den items hab ich die id als fk vom rezept hinterlegt und in den rezepten jeweils die fks der items aus denen die bestehen.

kleines beispiel anhand von minecraft:

piston herstellen:

Items
ID Name Rezept
1 cobble
2 redstone
3 planks
4 iron
5 Piston 1

Rezepte
ID Name FK1 FK2 FK3 FK4 FK5 FK6 FK7 FK8 FK9
1 Piston 3 3 3 1 4 1 1 2 1

Sooo und jetzt möchte ich ganz gerne sagen hey ich bau 3 Stück von der sorte..
was brauch ich an cobble, planks, ..

kann das die db übernehmen oder muss ich mir da tatsälich anders behelfen?

blue
03.02.14, 02:10:31
Klar kann das die DB übernehmen aber ... ganz plump gesagt: Dein DB-Modell ist zu einfältig gestaltet. Ein Wink mit dem Zaunfahl: Ein Rezept besteht aus einer dynamisch gestalteten Anzahl von verschiedenen "Items". Dein Rezept besteht durchweg aus maximal neun Items. Was machst Du, wenn ein Item aus zehn besteht?

Du solltest Dich bei deinem Problem eher auf die Gestaltung der Datenbank konzentrieren, nicht auf die Aufgaben der Datenbank. IMHO sind Datenbanken zum Speichern der Daten gedacht. Zwar lassen sich damit auch Berechnungen durchführen, aber generell sind klassische Datenbanken zu statisch. Entsprechend leidet die Skalierbarkeit deiner Anwendung.

BTW: Ich bin absichtlich nicht konkret auf deine Frage eingegangen. Ich bin der Meinung, dass Datenbanken zur Speicherung von Informationen zuständig sind - nicht aber zur Auswertung bzw. zur Berechnung.

Pained_Soul
03.02.14, 06:09:05
Wenn das Rezept aus mehr als 9 besteht, machens wir einfach wie bei Minecraft und basteln vorher ein anderes ^^

ist eh nur beispielsweise gedacht und so zum rum probieren - da stehen irgendwann noch mehr Sachen drin - aber rein aus Neugierde, wie würdest du es machen?

aktuell gehts mir nur darum ne Liste zu bekommen wieviel von welchen Grunditem ich brauchen würde um das zu bauen bzw. wenn es aus nen weitern Teil besteht wiederum was ich dafür brauche usw.

Zahl
03.02.14, 20:03:09
Generell finde ich es nicht so schön solche Anwendungen mit Access oder Base zu entwickeln, da man dabei immer so dazu gedrängt wird, komplett alles in SQL bzw. dem DB-Schema auszudrücken, was man machen will.
In z.B. einer Webanwendung wär es ganz einfach, die Berechnung dann nach dem Query durchzuführen, d.h. deine 9 Felder mit 3 zu multiplizieren, und dann auszugeben. Für den Minecraft-Fall mag es reichen, einfach 9 Spalten für die 9 Felder im Crafting zu definieren, universeller wäre es natürlich, eine n:m Beziehung über eine weitere Tabelle zu realisieren, dann könnte man beliebig viele Zutaten haben. Über dein statisches Modell hast du dafür quasi kostenlos schon die Anordnung der Items für das Rezept erledigt, im n:m-Modell musst du das über eine zusätzliche Spalte regeln und am besten durch einen UNIQUE Key verhindern, dass du für ein Rezept ein Feld mehrfach belegst. Wenn dir die Anordnung zum Craften egal ist kannst du auch noch ein Mengen-Feld einführen, damit jedes Item in einem Rezept nur einmal auftaucht.

Hoffe das sind erstmal genug Denkanstöße. :)

Pained_Soul
04.02.14, 08:58:41
Ja das mit der n:m Beziehung hatte ich auch schon im Kopf - eben mit ner zusätzlichen Tabelle :D Ebenso die Geschichte mit dem Mengen-Feld.

Es wäre also besser, wenn ich direkt in mysql in verbindung mit php rüber switche und dort anfange zum rum basteln? :D

Naja.. oke.. was für ne Frage.. 0.o war ja von anfang an klar.. eigentlich..

Hatte mir halt erhofft, dass es irgend ne "hey machs doch so und alles is super Lösung" gibt, ohne mich jetzt wieder Tage mit allem auseinander setzen zu müssen :D - gibt ja etliche auf DB basierende Systeme die so Primär- und Sekundärbedarfsrechnungen aufstellen - hätt mir daher vorstellen können, dass es so ne alles wird Super Funktion gibt :D
aber gut, oke ^^
Besser vorher mal gefragt als sich hinterher geärgert :D

Zahl
04.02.14, 23:28:23
Machbar ist das wie gesagt auch mit Access und Konsorten. Ich erinnere mich noch dunkel an einen Access Kurs in meiner Schulzeit. Ich fand es damals eher gewöhnungsbedürftig, dass man da dann mit SQL, diesen komischen Formen und VBS rumgewurstet hat. Es schien mir auch so, als wenn man es wo nur geht vermeidet, VBS zu benutzen, und dann nur bei diesen Formularen hängen blieb, in denen einiges nicht so einfach ging, und man es dann eben in seine SQL-Ausdrücke verfrachtet hat.
Wenn du es Webbasiert machst - z.B. mit PHP - dann kannst du es auch ganz leicht hinterher rumzeigen, ohne dass die Leute sich erst irgendwas runterladen müsen. ;)

Pained_Soul
05.02.14, 12:59:05
Alles klar, dann muss ich mich echt wieder damit auseinander setzen :D

wie gesagt, ich hatte halt gehofft, es gäb speziell für so nen Anwendungsfall ne alles wird gut Formel :D

Jetzt muss ich mir nur noch überlegen, wie ich das dann gestalte, wenn mein Teil komplexer ist zum herstellen und ich die gesamtkosten haben will XD

Bsp.:

BG1 besteht aus Teil 1 und Teil 2
BG2 besteht aus Teil 1, Teil 3 und BG1
Endprodukt besteht aus BG1 und BG2

So verschachtelte sachen halt..

wie mach ich das jetzt am besten, dass ich raus bekomm wieviel ich von Teil 1,2 und 3 insg. brauch :D

ich hab nur haufen komplizierte Sachen dazu im kopf.. und ob das dann so funktioniert ist die nächste Frage :D

Meine bisherigen ideen scheitern irgendwie denke ich daran, dass ich es eben universell halten möchte - für den Fall nicht zu wissen wie oft das verschachtelt ist.
Bzw. mir darüber später keine Gedanken machen zu müssen :D

blue
05.02.14, 21:43:48
@Pained_Soul: Bah ... ist bei mir völlig untergegangen. Wie aber angemerkt sind Datenbanken IMHO zum Speichern von Daten gedacht. Verlagere die Auswertung der Daten in eine Anwendung.
Wie auch schon von Zahl gesagt, wäre eine n:m-Beziehung zielführender, als eine statische Anzahl Felder.

BTW, Zahl nannte es einen Plus-Punkt, dass die Werte bereits sortiert aus der Tabelle kommen ... IMHO ist das allerdings alles andere als vorteilhaft. Was ist, wenn sich die Ordnung ändern soll? Hier ein Tipp, den nie vergessen solltest: Das Datenbank-Modell einer bereits genutzten Anwendung zu ändern ist die absolute Hölle - zumindest bei RDBMS. Entweder du programmierst Dir einen Wolf, oder Du fängst an das Modell zu erweitern - was auf längere Sicht zu Verstößen der Normalformen führt.

Du solltest Dir vielleicht mal andere Datenbank wie CouchDB ansehen. Ein ziemlich alternativer Ansatz zu relationalen DBMS. Außerdem kannst Du hier sogar direkt mit JavaScript die Daten abgreifen und musst nicht erst alles noch mit PHP o.ä. abfragen.

/e1:
Bitte beachte aber, dass Du beim Ändern von Daten immer eine Art Sicherheits-Layer einbaust, welche die Eingaben zunächst validiert. Schließlich ist es nicht besonders schwierig JavaScript zu ändern bzw. einzuschleusen ;)