Torri
Anmeldungsdatum: 29. Mai 2008
Beiträge: 824
|
Zur Datenbank bitte nochmal: Kann mir das mal jemand erklären? Bei den Fragen: Was soll man bei Yes/No eintragen? Bei den Personen: Wo bleiben die anderen Spalten und wieso habt ihr euch gerade city und birth ausgesucht? Von meiner Testperson Angela Merkel weiß das doch eh keiner ...
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
Torri schrieb: Zur Datenbank bitte nochmal: Kann mir das mal jemand erklären? Bei den Fragen: Was soll man bei Yes/No eintragen? Bei den Personen: Wo bleiben die anderen Spalten und wieso habt ihr euch gerade city und birth ausgesucht? Von meiner Testperson Angela Merkel weiß das doch eh keiner ...
Weil das nur zum testen gedacht ist, ob dir das so passt. Ich habe einfach irgendwelche Werte genommen. Sag mir was du alles willst, und du kriegst es. Naja, fast. 😉 (Die Spaltennamen können wir ruhig in Deutsch machen, wie gesagt habs nur zum testen reingekritzelt) Und ach ja, Am Kupfergraben 6 Berlin-Mitte 😈
|
Torri
Anmeldungsdatum: 29. Mai 2008
Beiträge: 824
|
Kannst du mir nicht die Möglichkeit geben, Spalten selbst hinzuzufügen? Wir werden das immer wieder brauchen ...
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
Torri schrieb: Kannst du mir nicht die Möglichkeit geben, Spalten selbst hinzuzufügen? Wir werden das immer wieder brauchen ...
Ok, ich arbeite dran, gib mir ein paar Minuten.
|
Torri
Anmeldungsdatum: 29. Mai 2008
Beiträge: 824
|
Hat Zeit, ich bin eh noch eine Weile beschäftigt.
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
deadtronic schrieb: Gibt es einen Unterschied zwischen
try:
a = a.lower()
except:
if a == None:
a = "none"
und
if a == None:
a = "none"
a = a.lower()
?
Jap, gibts. Setz mal a = 5 oder a = True. Dann siehst warum 😛
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
TDeveloper schrieb: Jap, gibts. Setz mal a = 5 oder a = True. Dann siehst warum 😛
Ok, habe ich nicht probiert. Allerdings werden wir bei sqlite ja sowieso nur text-felder gebrauchen können, d.h. es ist eh immer string. Bool gibt es nicht, zumindest finde ich es nicht. D.h. wir werden dafür entweder string oder int nehmen, und ich würde sagen lieber gleich alles string? Dann baue ich einfach ne Checkbox für die Felder, die dann einfach "TRUE/FALSE" in die db schreibt. Übrigens, ich mag PHP nicht. Da denkt man sich, man startet ein Python-Projekt, und was macht man? Man programmiert PHP. Grr 😠 Sollte hier ein gelangweilter PHPler sein, der nichts zu tun hat, kann er sich bei mir melden, er wäre sich meiner Dankbarkeit gewiss. 😀
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
Dann gehts dir genau wie mir. Ich hasse PHP (jedenfalls zu proggen) Allerdings kenn ich jemanden der spielt sich geradezu mit PHP. Der hat nur leider einen persönlichen Kreuzzug gegen OpenSource gestartet. Warum weiß ich nicht. Ständig will er wissen wie er am besten Sicherheitsmechanismen einbauen kann, ob Hashes auch wirklich sicher sind, wie man am besten nen Kopierschutz implementiert usw. Gut dass ich davon keine Ahnung habe ☺ mfg EDIT: Verdammt, dachte das ganze wäre einfacher zu erstellen. Jedenfalls, das Skript funktioniert nun in *speziellen* Fällen. D. h., nur wenn alle Daten vorhanden und alle Einträge eindeutig sind.
|
diesch
Anmeldungsdatum: 18. Februar 2009
Beiträge: 5072
|
Ich bin über [topic:sqlite3-spaltennamen-abfragen] auf diese Diskussion aufmerksam gewiorden, und möchte mal ein paar Ideen in die Runde werfen, wie ich spontan vorgehen würde (den Code habe ich mir aber noch nicht angeschaut): Ich würde zu den Personen nicht die Eigenschaften speichern, sondern direkt die Fragen. Das ist deutlich flexibler, und ihr spart euch den Aufwand, erst die Fragen erzeugen zu müssen. Die Datenbank könnte dann so aussehen: Tabelle personen : Spalten für ID, Name und evtl. zusätzliche Daten, z.B. Wikipedia-Link Tabelle fragen : Spalten für ID und die Frage Tabelle personen_fragen : Verknüpfung von Personen, Fragen und Antworten. In jeder Zeile steht einen Personen-ID, eine Frage-ID und die Antwort (Ja , Nein ) für diese Frage zur gegebenen Person.
Für die Suche nach einer optimalen Fragen-Reihenfolge würde ich wohl eine Art Alpha-Beta-Suche nehmen, wobei der Fragesteller versucht, so viele Personen wie möglich auszuschließen. Um keine unnötigen Fragen zu stellen, könnte man noch Abhängigkeiten zwischen Fragen definieren: Tabelle fragen_abhaengigkeit : Jede Zeile enthält zwei FrageID-Antwort-Paare. Wenn Frage1 mit Antwort1 beantwortet wurde, heißt das, dass man bei Frage2 von Antwort2 ausgehen kann, ohne Frage2 stellen zu müssen.
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
Es ist aufgrund der Datenbankstruktur wohl nicht wirklich vorgesehen, im Nachhinein noch Spalten zur Datenbank hinzuzufügen. Das heisst im großen und ganzen, wir können SQLite verabschieden, mehr Informationen gibts in diesem Thread. Lysander schlägt dort CouchDB(1,2← bitte lesen) und MongoDB vor, wobei ich für CouchDB wäre. Einfach aus dem Grund, dass es bereits eine Konfigurationsoberfläche mitbringt, MongoDB nicht. Solange es keine Gegenstimmen gibt, tue ich der einfachheit halber mal so als würden wir CouchDB in Betracht ziehen. 😉 @TDeveloper: Siehe 2.ter Link, wenn ich mir so den Aufbau anschaue, habe ich so ein bisschen das Gefühl, dass das die ganze Sache sogar vereinfacht, auch wenn das eine Recht wage Vermutung ist. Übrigens ist für Python auch gesorgt. Es gibt nur zwei große Nachteile, erstens: CouchDB läuft auf keinem Webspace. Da muss ein Root/VServer her. Andererseits wird das ganze auf lange Sicht sowieso auf einen Server hinauslaufen, da man keine großen Datenbanken mit einem Webspace hosten können(bzw. kann man schon, aber macht keinen Spaß). Und ich hoffe mal, dass es hier auf Ubuntuusers vielleicht irgendjemanden gibt, der Kapazitäten übrig hat und so eine Datenbank hosten kann. Zweitens: Entweder jeder Spieler muss bei sich die CouchDB-Software laufen haben, was eigentlich nicht vertretbar ist, oder sämtliche Datenbankzugriffe laufen über das Netzwerk. Da bezweifle ich auch, ob das so eine gute Lösung ist, könnte sehr langsam werden. Oder wir lassen sämtliche Berechnungen auf dem Server laufen und lassen den Client auf dem Rechner des Spielers nur noch anzeigen. Wobei dann der Schritt zur rein Webbasierten UI auch nicht mehr sehr groß ist. /edit: Stimmt doch nicht so ganz, es gibt Deskop Couch, dieser startet CouchDB erst beim ersten Zugriff, somit beinträchtigt das das System nicht. desktopcouch Wie das aber genau funktioniert und wofür Desktop Couch eigentlich da ist, verstehe ich selber noch nicht ganz. Zumindest sollte aber damit CouchDB auf dem Desktop umsetzbar sein, das Teil befindet sich im Repo also geht soweit alles klar. Ich lasse das oben trotzdem mal so stehen, sonst muss ich den gesamten Kontext ändern. So, ich denke das ist alles was mir dazu einfällt. Zwar halte ich eigentlich eine Lösung per SQLit für am besten, aber in dem Fall müssen wir eben vorher wissen, was wir für Spalten brauchen. Das ist absolut unvorhersehbar. Wenn es eine Lösung im Stile von CouchDB in der Umsetzung von SQLite, d.h. eine einzige Datei, kein Serverdienst, geben würde, wäre das wohl genau das was wir brauchen. Ich werde noch etwas weitersuchen, ihr könnt ja mal bitte eure Meinung dazu abgeben.
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
diesch schrieb: Ich würde zu den Personen nicht die Eigenschaften speichern, sondern direkt die Fragen. Das ist deutlich flexibler, und ihr spart euch den Aufwand, erst die Fragen erzeugen zu müssen.
Jetzt mache ich mir endlos Gedanken über CouchDB als alternative und du kommst daher und präsentierst eine Lösungsmöglichkeit mit der vorhandenen Datenbank. Danke vielmals, verdammt hätte ich das nur vorher gewusst. 👍 Habe zwar noch nicht exakt verstanden, was du meinst, aber ich muss auch erst wieder die CouchDB aus meinem Kopf verdrängen. 😎
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
Keine Ahnung wie man das ganze jetzt macht (ich seh mir morgen mal alles an), aber von mir aus muss es wie gesagt gar keine Datenbank sein. Ein File mit pickle speichern und laden ist soweit ich das nachvollziehen konnte immer noch Performant genug. Und den Code den ich geschrieben habe muss ich eh nochmal komplett überarbeiten. Wäre übrigens cool wenn man auf die DB (sofern man eine verwendet) direkt einen Filter anwenden könnte, würde alles vereinfachen ☺ Achja, wegen der Alpha-Beta suche: Ich verstehs nicht ganz. Wie gesagt, ich guck mir das morgen alles in Ruhe mal an. Aber soweit ich das beurteilen konnte macht mein Code eh das, was das Verfahren beschreibt. mfg
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
diesch schrieb: Tabelle personen : Spalten für ID, Name und evtl. zusätzliche Daten, z.B. Wikipedia-Link Tabelle fragen : Spalten für ID und die Frage Tabelle personen_fragen : Verknüpfung von Personen, Fragen und Antworten. In jeder Zeile steht einen Personen-ID, eine Frage-ID und die Antwort (Ja , Nein ) für diese Frage zur gegebenen Person. Tabelle fragen_abhaengigkeit : Jede Zeile enthält zwei FrageID-Antwort-Paare. Wenn Frage1 mit Antwort1 beantwortet wurde, heißt das, dass man bei Frage2 von Antwort2 ausgehen kann, ohne Frage2 stellen zu müssen.
Ok, jetzt, nach 13 Stunden schlaf, klingt das doch schon viel logischer. 😀 Und stimmt, auf die Art würde das wirklich funktionieren. Das Problem an der Sache ist allerdings, dass diese Datenbank viel schwerer zu warten ist, weil man sich immer die IDs merken muss. Der Wikipedia-Link ist aber nur für die Bearbeitenden gedacht und nicht wirklich für die Verarbeitung, oder? @ Torri: Wäre das machbar?
|
Torri
Anmeldungsdatum: 29. Mai 2008
Beiträge: 824
|
Ähm ... glaub schon? Wo geben wir das denn dann ein?
|
deadtronic
Anmeldungsdatum: 18. Februar 2010
Beiträge: 762
|
diesch schrieb: Tabelle fragen_abhaengigkeit : Jede Zeile enthält zwei FrageID-Antwort-Paare. Wenn Frage1 mit Antwort1 beantwortet wurde, heißt das, dass man bei Frage2 von Antwort2 ausgehen kann, ohne Frage2 stellen zu müssen.
Angemerkt sei, dass es ebenso die Möglichkeit gibt, dass die Frage aufgrund einer anderen nicht zutrifft. Z.b. Frage Ist die person blond? Zweite Frage: Ist die person rothaarig? Wenn Frage eins gestellt würde, lautet die Antwort für die zweite Nein. Torri schrieb: Ähm ... glaub schon? Wo geben wir das denn dann ein?
Ok, also ich habe jetzt mal die Datenbankstruktur erstellt. Ausserdem habe ich ein Tool gefunden, mit dem sich die Werte viel komfortabler eingeben lassen. *klick*. Meine eigene Lösung würde zwar auch funktionieren, aber dann hat man ein Tool online am laufen, das ein permanentes SIcherheitsrisiko ist, muss eigentlich nicht sein. Kurze Erläuterung:
Login: SQLite auswählen, Datenbankname ist: sqlite.sql Nach dem Einloggen steht am Rand die Datenbank. Dort einmal klicken, dann bekommt man die Tabellen angezeigt. Die Tabellennamen sollten eindeutig sein, ich habe mal ein kleines Beispiel zum Verständnis hinzugefügt wie die Struktur aussehen sollte. Spalten hinzufügen: Tabelle auswählen, oben in der Leiste auf INSERT klicken. Folgendes beachten: integer ist eine Zahl, meistens eine ID, Boolean ist 0 für Nein und 1 für Ja. Bei Personen und Fragen gibt es den ersten Eintrag ID, als Typ steht dort "integer primary key unique". Diesen einfach frei lassen, dann wird dem Eintrag automatisch eine ID zugewiesen. Spalten anzeigen: Tabelle auswählen und oben auf Ansicht klicken. Ich denke mal, das Tool ist doch ziemlich verständlich, oder? ☺ Da das mit Ajax arbeitet, geht das Speichern auch ziemlich schnell und man kann sofort einen neuen Eintrag anlegen, ohne nochmal klicken zu müssen. Geht das in Ordnung? Vielleicht kann ich den Code auch noch ein bisschen modifzieren, damit nur die benötigten Funktionen angezeigt werden und man nichts falsch machen kann, da muss ich mal schauen. Zumindest wenn es nötig sein sollte.
|