2017-01-24 7 views
-1

私はこの問題を友人と話し合っていましたが、私はその考えを理解していません。この概念を持つすべてのタプルにはparent_idがあります。しかし、私はこの属性を参照として使用してバイナリツリーのようにテーブルをどのようにトラバースするのか分かりません。私はデータベースで聖書をモデル化しようとしています。聖書は、古典と新約聖書の2つの現代的な空間で構成されています。これらは、章と章の章にリンクされています。私は、URLを持つデータベースに特定の一節を格納できるようにしたい。すべてのURLは説教と説明にリンクされます。私はクラスごとに1つのテーブルを作成する予定だったので、スキーマはこのようになります。データベーステーブルにバイナリツリーの概念を作成するにはどうすればよいですか?

contemporaryspace(ID int,oldornew string) 
books(ID int,whichbook string) 
chapters(ID int,which_chapter string) 
passages(ID int,which_passage string) 

私は全く新しいデータベースで、これを計画しています。しかし、友人は、それは悪い考えであり、私の目標を達成するためには、ただ1つのテーブルをバイナリツリーにする方が良いと言いました。

+1

タグ 'sql'は十分ではありません...あなたの質問はあなたにとっては明らかかもしれませんが、外部のためではありません。 [edit link](http://stackoverflow.com/posts/41818528/edit)を使用して、適切なタグ(RDBMSを含むバージョン)を追加し、詳細を提供してください。さもなければ、これはすぐに閉鎖されます... – Shnugo

+1

SO警察は非常に高速で無慈悲です:-)しかし、あなたの質問を編集し、詳細を提供しました。私はすでに再オープンすることに投票しましたが、使用するRDBMSを追加してください。特に階層的なデータはかなり異なって扱われます... – Shnugo

+1

これは面白いでしょう:-)いいえ、 'rdbms'というタグを使うべきではありませんが、実際のSQLシステム(MySQL、Oracle、MS SQL Server 、何でも...)バージョンを追加してください! – Shnugo

答えて

0

1人の親に2人以上の子がある場合、ツリーはバイナリではありません。

データベース内のエントリが他のエントリとは異なる方法で処理される場合、それらは異なるタイプを持ち、別々のテーブルに移動する必要があります。 たとえば、書籍に著者が存在し、章は作成できない場合は、書籍と章に関する情報を同じテーブルに格納しないでください。

しかし、すべてのテーブルが実際に必要なわけではない可能性があります。書籍には、OTまたはNTのいずれかの属性があり、contemporaryspaceテーブルを参照する外部キーですが、contemporaryspaceには実際に有用な情報が格納されていない場合は、そのテーブルは不要で、"OT"または"NT"をブックテーブルに直接挿入します。

関連する問題