2009-07-29 6 views
1

データベース設計に関する質問があります。私は自分の教育のために電子ノートや「Everything Bucket」を作りたいと思っています。 EverNoteやCircus Ponies NotebookやオープンソースのKeepNotesやRed Notebookのような素晴らしい選択肢があります。しかし、私が言ったように、私は学習経験のためだけに私自身を作りたいと思っています。電子ノートブックのデータベース設計

ただし、データベース設計の経験はあまりありません。私の質問は、テーブル、インデックスなどのデザインがどうなるべきかです。考えているのは

  • すべてのノートには0個以上のノートまたはページがあります。
  • すべてのページには一意のタイトルとコンテンツがあります。 「実際の」コンテンツに加えて、作成日、最終更新日などのメタデータがあります。
  • カテゴリが「なし」であっても、すべてのページは1つ以上のカテゴリに属します。カテゴリにはサブカテゴリが追加される場合があります。たとえば、「コンピュータサイエンス」のカテゴリには、「プログラミング言語」や「コンパイラ設計」のようなサブカテゴリがあります。
  • すべてのページには、0個以上のタグが関連付けられています。これらはカテゴリに似ていますが、全く同じではありません。たとえば、論文は「コンパイラデザイン」カテゴリに属する​​かもしれませんが、著者名、ジャーナル名、出版年などのタグが付いている場合があります。
  • ページのコンテンツには、テキスト、画像、リンクなどを格納できるHTMLストリームが含まれている必要があります。彼らはかなり大きなデータである可能性があります。イメージのような特定の部分をテキストとは別に保存することは理にかなっていますか? (PDF文書の内容を表示することができれば幸いですが、現時点ではこれは必須ではありません)。
  • 同じデータベース内の他のページへの相互参照をページに含めることもできます、wikiのように。

カテゴリ、タグ、部分的なタイトル、またはフルテキストで検索できます。私は、カテゴリ、タグ、およびタイトルを表示するデータベースの異なるビューをプログラムが持つことができると思うので、それらを素早く列挙することができればいいと思う。

これらの要望を考えれば、良いデータベースはどのように見えますか?私は、SQLデータベースが使用されると仮定しているが、それにコミットしていない - Sleepycat Java EditionデータベースのようなものもOKだろう。

ご協力ありがとうございます。ノートブックを皮切り

+1

オープンソースのオプションを知っているので、ソースとドキュメントを調べて他の人がこれを実装しているかどうか確認してみましたか?それはあなたに良い出発地を提供するかもしれません(または少なくともあなたがしたくないことのアイデア)。 – Velociraptors

+0

はい、KeepNoteとRedNotebookの動作を見ました。 KeepNoteは、ファイルとディレクトリの階層に格納されたXMLを使用します。 RedNotebookは特殊なテキスト形式を使用します。 多くのことを見ることができます。 Wordpressは私が望むものの大部分を占めるようですが、私のPHPスキルは強くありません。 C、C++、Java、Pascal、またはLispの何かが最も便利です。しかし、PHPを学ぶことに何も問題はありません... –

答えて

1

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

あなたは、ノートブックにたい任意のプロパティのためのフィールドを追加します。次に、ページ、カテゴリ、タグなど、他のものと同様のテーブルを作成し、すべてが一意のIDを持つようにします。

ここで、1対1、1対多、多対多のテーブルの関係を追加します。ページにはノートブックに属するノートIDフィールドがあります。ページは多くのカテゴリに属する​​ことができるので、page_idとcategory_idでリンクテーブルを作成します。

最初に完全なデータ構造を作成してから、それをクエリすることを考えてください。

0

私はTiddlyWikiまたはZimだと思います。 SQLスタイルのリレーショナルデータベースという意味では「データベース」は使用されませんが、検索、リンク、タグ付け、写真の保存などが可能です。

関連する問題