2009-07-29 1 views
1

Ich habe eine Frage zum Datenbankdesign. Ich möchte ein elektronisches Notizbuch oder "Everything Bucket" für meine eigene Ausbildung erstellen. Ich weiß, es gibt großartige Alternativen wie EverNote oder Circus Ponies Notebook, oder die Open Source KeepNotes oder Red Notebook. Aber, wie ich schon sagte, ich möchte mein eigenes nur für die Lernerfahrung erstellen.Datenbankentwurf für ein elektronisches Notizbuch

Ich habe jedoch nicht viel Erfahrung mit Datenbank-Design. Meine Frage ist, wie sollte das Design aussehen - Tabellen, Indizes, etc. Die Art, wie ich daran denke, ist, dass

  • Jedes Notizbuch hat keine oder mehrere Notizen oder Seiten.
  • Jede Seite hat einen eindeutigen Titel und Inhalt. Zusätzlich zu dem "echten" Inhalt würden Metadaten wie das Erstellungsdatum und das Datum der letzten Änderung vorhanden sein.
  • Jede Seite gehört zu einer oder mehreren Kategorien, auch wenn die Kategorie "keine" ist. Kategorien können zusätzliche Unterkategorien haben. Zum Beispiel könnten in der Kategorie "Informatik" Unterkategorien wie "Programmiersprachen" und "Compiler-Design" existieren.
  • Jede Seite hat null oder mehr Tags zugeordnet. Diese wären den Kategorien ähnlich, aber nicht ganz gleich. Ein Papier könnte beispielsweise der Kategorie "Compiler-Design" angehören, könnte aber mit den Namen des Autors, dem Zeitschriftennamen, dem Veröffentlichungsjahr usw. versehen sein.
  • Der Inhalt einer Seite sollte einen HTML-Stream enthalten, der Text, Bilder, Links usw. enthalten kann. Sie könnten ziemlich große Datenstücke sein. Wäre es sinnvoll, bestimmte Teile wie Bilder getrennt vom Text zu speichern? (Es wäre großartig, wenn ich auch den Inhalt von PDF-Dokumenten anzeigen könnte. Aber das ist an dieser Stelle nicht wirklich erforderlich.)
  • Es wäre auch schön, wenn eine Seite Querverweise auf andere Seiten in derselben Datenbank enthalten könnte , wie ein Wiki.
  • Ich würde gerne in der Lage sein, nach Kategorie, Tag, Teiltitel oder durch den Volltext zu suchen. Ich stelle mir vor, dass das Programm einige verschiedene Ansichten der Datenbank mit den Kategorien, Tags und Titeln haben könnte, also wäre es schön, wenn diese schnell aufgelistet werden könnten.

    Also, angesichts dieser Wünsche, wie würde eine gute Datenbank aussehen? Ich gehe davon aus, dass eine SQL-Datenbank verwendet wird, bin aber nicht dazu verpflichtet - etwas wie die Sleepycat Java Edition-Datenbank wäre auch in Ordnung.

    Vielen Dank im Voraus für die Vorschläge!

    +1

    Da Sie sich der Open-Source-Optionen bewusst sind, haben Sie in Betracht gezogen, die Quelle und die Dokumentation zu untersuchen, um zu sehen, wie andere dies implementiert haben? Es kann Ihnen einen guten Startplatz geben (oder zumindest eine Vorstellung davon, was Sie nicht tun wollen). – Velociraptors

    +0

    Ja, ich habe mir angesehen, wie KeepNote und RedNotebook funktionieren. KeepNote verwendet XML, das in einer Hierarchie von Dateien und Verzeichnissen gespeichert ist. RedNotebook verwendet ein spezielles Textformat. Es gibt jedoch viel mehr zu sehen. Wordpress scheint das meiste zu tun, was ich will, aber meine PHP-Fähigkeiten sind nicht stark. Etwas in C, C++, Java, Pascal oder Lisp wäre am bequemsten. Aber es ist nichts falsch daran, etwas PHP zu lernen ... –

    Antwort

    1

    Beginnend mit einem Notebook:

    CREATE TABLE `notebook` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `name` VARCHAR(64) NOT NULL , 
    PRIMARY KEY (`id`) 
    ) 
    

    hinzufügen Felder für alle Eigenschaften, die Sie auf dem Notebook möchten. Erstellen Sie dann ähnliche Tabellen für andere Dinge wie Seite, Kategorie, Tag usw. und stellen Sie sicher, dass alle eine eindeutige ID haben.

    Fügen Sie jetzt Beziehungen dieser Tabellen hinzu - eins zu eins, eins zu viele, viele zu viele. Eine Seite wird ein notebook_id-Feld haben, wie es zu einem Notebook gehört. Seiten können zu vielen Kategorien gehören. Erstellen Sie daher eine Verknüpfungstabelle mit page_id und category_id.

    Erstellen Sie zuerst die perfekte Datenstruktur, dann denken Sie darüber nach, es zu fragen :) Hoffe, dass hilft ein bisschen.

    0

    Ich denke, TiddlyWiki oder Zim würde erfüllen die Anforderungen, die Sie erwähnen. Sie verwenden keine "Datenbanken" im Sinne einer relationalen Datenbank im SQL-Stil, können aber gesucht, verlinkt, markiert, Bilder gespeichert werden usw.