"einfache" Datenbank?
-
Ich möchte ein kleines Adresstool erstellen und wollte euch fragen wie ich am besten mit den Daten ( Name, Adresse, .. ) umgehen soll bzw. wie/wo ich sie speichern soll?! Dabe möchte ich keine große Datenbank verwenden, das ganze soll eigentlich maximal aus 2 Dateien ( Programm, Datenbank ) bestehen.
Zu was würdet ihr mir raten?
Danke für eure Tipps!
-
Textdatei
-
Bei komplexeren Zusammenhängen als einer einfachen Tabelle - dafür tut's auch ne CSV-Datei - könnte SQLite dich weiterbringen.
-
Ich würd einen micro-clone von MySQL machen; also
Eine Klasse namens "DataBase".
Eine Klasse namens "Entry".
Eine Klasse namens "EntryValue".
Viele Klassen mit vielen Namen.Bezüglich den vielen möglichen typen:
Machs so wie ichs gemacht habe. (#define ENTRY_INT 1)
ODER mach um jeden benutzbaren typ einen Wrapper: (polymorphismus)Ich könnte sehr wohl etwas vergessen haben.
Das ist jetzt also nur ein grobes design, wirst wohl merken, dass man das nicht compilieren kann.class EntryValue { // abstract... add some basic functions here. (getType, more) // ^ warning: must use virtual public: virtual int myfunction(void) = 0; // pure virtual virtual int myfunction(void) { // overridable. // "Default function" } ENTRY_XXX gettype()... or you get a better idea for the return value... } class Int : public EntryValue { public: int value; Int(int integer) { this.value = integer; } // you dont need the operators. just use myInt->value instead. // you know, this is only for managing all the different types of } // also: EntryValue* val = new Int(10);// enum #define ENTRY_UNKNOWN 0 #define ENTRY_INT 1 #define ENTRY_CHAR 2 #define ENTRY_LONG 3 #define ENTRY_ENTRY_ADDRESSE 4 // more (user defined types, too, of course) class EntryValue { // "Object"... ? (ODER nimm die Wrapper hier!) private: int ptrdepth; // 0:char. 1:char*. 2:char**. 3:char***, ... int type; // ENTRY_XXX void* dataptr; public: EntryValue(int type, void* ptr, int ptrdepth=0) { zu einfach } } class Entry { // (polimorphism): pure virtual / abstract virtual setField(int index. EntryValue* value) = 0; virtual EntryValue* getField(int index) = 0; } class Entry_Addresse : public Entry { char *stadt, *strasse; // field 1, field 2 int hausnummer, plz; // field 3, field 4 char *telefon; // field 5 // more fields. numbers is purely your choice. this isnt managed in any way ;o // override set/get } class Entry_Person... (alter, name, Entry_Addresse*) class Entry_Smiley... (farbe, happyness) class Entry_Computer... (preis, cpu, ram) class DataBase { Vector<Entry*> data; entryAdd(Entry* anything)... entryDeleteIndex(int atindex) ... Entry* entryFetch(int index) ... // Entry* entryFetchAdvanced(deine eigenen funktionen zum suchen!) // ... isEmpty()... }
-
Hat das da oben was geholfen? Falls das totaler bullsh-it sein sollte, bitte meine Signatur(Das Ding da unten) beachten.
-
lk schrieb:
Hat das da oben was geholfen? Falls das totaler bullsh-it sein sollte, bitte meine Signatur(Das Ding da unten) beachten.
Zumindest die #defines sind bullshit. Wenn du schon enum im Kommentar drüber schreibst, dann mach doch auch gleich ein enum draus.
Davon abgesehen ist das vermutlich totaler Overkill, wenn wie vorher geschrieben auch ne kleine txt oder csv Datei reciht...
-
Wenn´s unbedingt ne Datenbank sein soll würde ich auch SQLite empfehlen. Eigenständige DBMS (im Sinne von db Dienst) halte ich für zu umständlich, und einen Objectmapper für eine so kleine Anwendung ebenfalls.
-
SQLite ist sicher ne Option.
Vorteil - SQL Schnittstelle, was ne spätere Migration auf ne richtige rdbms vereinfachen sollt.Falls SQL zu umständlich und ne rdbms eh keine Option ist, solllt es auch ein Key-Value Store tun. Natürlich keine verteilte "NoSQL DB".
Berkley DB waer sicher ne Option ...
Vorteil: Felder/Spalten sind Optional, was die ganze Sache ziemlich dynamisch macht. Kommen spaeter Felder/Spalten hinzu, brauchst keine Aenderung an der Schnittstelle zur DB, alte Speicherstaende bleiben ohne zutun gültig.
Sowas erreichst sonst nur mit "komplexeren" dateiformaten (xml z.b.)Ciao ...
-
Danke für eure Tipps!
Ich glaub ich werds mit ner Textdatei probieren, steh zwar mit Regex auf Kriegsfuss aber iwann muss ich da ja mal durchsteigen XD
Btw. pumuckl meinte "kleine txt oder csv Datei", was ist da denn der Unterschied?
Die Daten werden bei beiden "Varianten" doch in ner Textdatei ( txt ) gespeichert, unterschiedlich ist doch nur das Trennzeichen ( Semikolon,.... ) oder?!?