Programmieren einer Datenbank
-
Wenn du jetzt eine Struktur hast, sind da auch nur Daten drin, wie bspw. Integer und Strings und son Quark. Andere Objekte bestehen auch aus Quark!

Und Quark kannst du in der Datenbank schon so speichern.Bsp:
struct sBla { int zahl; int zahl2; string text; } Bla; query << "INSERT INTO <table> (zahl,zahl2,meintext)" "VALUES(" << Bla.zahl << ", " << Bla.zahl2 << ", " << Bla.text << ");";Beispiel ohne Gewähr und ohne Verstand.
Ich hoffe es ist klar, was ich damit sagen wollte!
-
elise schrieb:
willst du ein datenbankmanagement selber programmieren?
Nein, eine simple Datenbank. Sie braucht nichtmal Tabellen zu unterstuetzen, eine Instanz der Datenbankklasse pro Tabelle reicht.
elise schrieb:
oder eine fertige hernehmen und objekte speichern können?
Nein, ich moechte es ja selber machen.
elise schrieb:
oder textfiles hernehmen und objekte darin speichern?
Speichern stelle ich mir so vor: man nehme eine Datei und schreibe den Inhalt eines jeden Objekts in der Datenbank sequentiell hinein, evtl mit entsprechenden Markierungen damit man das Ende eines Objekts erkennt. Laden waere dann nur das kopieren der Objekte aus der Datei in den speicher. Das muss es aber zuerst mal nicht koennen, das laesst sich ja auch durch ein paar geeignete Klassen erreichen.
elise schrieb:
wenn das erste, was soll das managementsystem können, und wie sollen die daten auf der platte abgelegt werden?
Wie gesagt, ablegen nicht wichtig am Anfang

fdgdfgd schrieb:
Das tolle einer Datenbank ist, dass die Daten auch auf der Festplatte liegen. Sprich du musst den Vektor auch speichern können. Zudem kannst du nicht immer alle Daten im Ram haben. Es wird immer nur das geladen was gebraucht wird, oder soviel wie reinpasst. Dafür musst du dir auch noch eine Lösung überlegen.
Och ja, ich moechte die Daten im Speicher halten. auslagern auf die Platte wenn ueberhaupt, dann spaeter wenn die Datenbank ueberhaupt mal besteht.
fdgdfgd schrieb:
Damit Bist du schon ein bischen beschäftigt. Dann müssen andere Programme auch auf die Datenbak zugreifen können.
Nein, es soll eine pure Datenbank sein, die in der Software, die darauf zugreift, laeuft. Das hatte ich tatsaechlich zu erwaehnen vergessen: Die Datenbank soll quasi nur fuer ein einziges Programm existieren, und zwar das Programm, dass die Datenbankklassen benutzt
Sprich keine eigene Anwendung wie die grossen RDBMS, sondern eine Sammlung von Klassen.the weatherman schrieb:
Objekte direkt speichern wird in C++ schwierig, da es weder eine allgemeine Methode zum Serialisieren noch Reflection gibt. Du müsstest dir eine Schnittstelle ausdenken um an die Daten zu kommen und die muss dann jedes Objekt implementieren, dass gespeichert werden soll.
Ja, wie ein paar Zeilen weiter oben beschrieben. Tut mir leid dass ich das vergessen hab.
Thomy schrieb:
Wenn du jetzt eine Struktur hast, sind da auch nur Daten drin, wie bspw. Integer und Strings und son Quark. Andere Objekte bestehen auch aus Quark!

Und Quark kannst du in der Datenbank schon so speichern.
[schnipp]
Beispiel ohne Gewähr und ohne Verstand.
Ich hoffe es ist klar, was ich damit sagen wollte!Ja, wie gesagt, steht bissel weiter oben

-
ich hab mir eben mal ueberlegt, wie man einen Forumspost darstellen koennte:
class post { private: unsigned int m_id; user *poster; // direkter Zeiger auf den Poster string m_content; string m_title; public: post( unsigned int id, char *title, char *content, user *poster); user *user() { return m_user; }; unsigned int id() { return m_id: }; string *content() { return m_content; }; string *title() { return m_title; }; bool streamToFile( int fd ); //! schreibt das Objekt in eine Datei (nehme an, den inhalt von this?) };
-
bool streamToFile( int fd ); //! schreibt das Objekt in eine Datei (nehme an, den inhalt von this?)
Da würdest du besser die << und >> Operatoren überladen.
Du kannst ja mal eine DB machen, die in .txt Dateien abspeichert und man wieder einfach einlesen/auswerten kann.
-
Ist euch schon aufgefallen, daß der Erstposter gar nicht weiß was er will bzw.
was eine Datenbank eigentlich ist `?Haut ihm nicht gleich solche Sachen um die Ohren.
-
Was genau hast du vor? Bei deiner Klasse für das Posting übernimmt die Datenbank ja nur das Dateimanagement, das Laden und Speichern überlässt du ja dem Objekt.
Erkläre mal in Worte, möglichst genau, wie du dir die Interaktion eines Programms mit der Datenbank vorstellst. Dann kann man dir am besten helfen, wie du schon festgestellt hast, haben die meisten hier - einschließlich ich - eine andere Vorstellung von einer Datenbank (wenn wir Datenbank sagen, meinen wir eigentlich ein Datenbankmanagementsystem, kurz DBMS).
-
Erklärbär schrieb:
Was genau hast du vor? Bei deiner Klasse für das Posting übernimmt die Datenbank ja nur das Dateimanagement, das Laden und Speichern überlässt du ja dem Objekt.
Erkläre mal in Worte, möglichst genau, wie du dir die Interaktion eines Programms mit der Datenbank vorstellst. Dann kann man dir am besten helfen, wie du schon festgestellt hast, haben die meisten hier - einschließlich ich - eine andere Vorstellung von einer Datenbank (wenn wir Datenbank sagen, meinen wir eigentlich ein Datenbankmanagementsystem, kurz DBMS).
Das was du programmieren willst ist übrigens auch ein DBMS, die Datenbank ist deine Textdatei.
Also so unterschiedlich sind unsere Auffassungen nicht, nur stellen wir uns unter einem DBMS etwas mehr vor als du es im Moment willst.
-
man könnte sich z.b. anschauen wie andere sowas machen.
--> http://www.freebyte.com/programming/database/

-
Klingt mir eher so als wenn eine Resourcendatei gesucht wird. Recht simpel wenn man dies in zwei Dateien aufsplittet: Resourcendatei und Indexdatei. Die erste binär, die zweite textuell. Löschen ist dann vielleicht etwas haarig wegen dem ganzen hin und her geschiebe, wenn man denn keine Löcher will, aber auch das läßt sich regeln.
Und das Interface bräuchte nur aus int write(char *data, unsigned int size) und dem entsprechendem read bestehen und dabei jeweils mit einer ID arbeiten. Noch ein has_data(id) oder get_size_of(id) etc. rein und es wird schon fast komfortabel. Geht sogar komplett in C, wenn man sowas denn will...
Oder einfach den Kram stumpf zippen mit zlib. Spart auch noch Platz.

-
Problem ist, dass mir die korrekten Begriffe fehlen, die einzigen Datenbanken, mit denen ich bisher gearbeitet hab, sind MySQL und SQLite, also hab ich bisher noch nicht viel mit der eigentlichen Datenspeicherung zu tun gehabt.
Ich hoffe, diesmal gelingt es mir, mein Vorhaben in Worte zu fassen:
Eine Klasse dient als Frontend zu einem Satz Tabellen. Jede Tabelle enthaellt Eintraege. Dabei ist jede Tabelle ein Objekt, eine Instanz einer Klasse, auf den jeweiligen Anwendungszweck spezialisiert (die evtl. von einer Basisklasse abgeleitet sein sollte, moechte man spaeter noch Tabellen dazutun). Jeder Datensatz ist ein Objekt einer Klasse und wird von der jeweiligen Tabellenklasse gespeichert.Die komplette Datenbank liegt also im Arbeitsspeicher.
Anlegen koennte man das eventuell so:
class UserTable { private: std::map<int, entry *> usersById; public: class entry { public: ... }; }Jeder Eintrag ist also ein Objekt im Speicher. Ausfallsicherheit gleich null, ich weiss, aber das ist mir momentan nicht wichtig.