質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.79%

MySQLなどのRDBMSで階層型やネットワーク型を再現可能でしょうか?

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,350

WeilSpinor

score -34

マインドマップアプリを作りたいのですが、マインドマップのデータ形式は、各ノードが自由に線で結ばれている構造になっているので、
普通に素朴に考えると、表形式ではなく、ネットワーク型のデータベースになります。

しかし、世の中では、データベースというと、mySQLに代表されるように、表形式のRDBMSばかりが挙げられ、あたかも、「一般的なデータベースなら、RDBMS形式だけでほとんどの場合事足りる」と言っているかのようです。

しかし、例えばHTMLのDOMのように、階層型のデータ構造は普通に需要があります。
それでもRDBMSばかり使われるということは、
「RDBMSだけで階層型やネットワーク型のようなデータの取り扱いが再現可能であるから」
なんじゃないかと思っていますが、実際どうなのでしょうか?

それとも、mySQLに匹敵するほどの、階層型・ネットワーク型DBMSの定番ソフトがあるのでしょうか?

私が使いたいのは、冒頭にも書いた通り、ネットワーク型のデータ構造です。

ご回答宜しくお願いします。

追記

調べると、関係(relational)データ構造とは集合論と述語論理における「n項関係」に基づいて、
「データ同士を論理関係で結びつける構造」
だそうで、
工夫しだいで大体どんなデータ構造も設計可能な、非常に汎用性の高いデータ論理体系
のようですね。
そして、それを実装してできたデータベース管理システムがRDBMSだそうで、
別に表形式のデータ構造ばかりを想定しているわけでは全くない
みたいですね。

提唱者は偉大ですね。

「RDBMSの登場により、ネットワーク型データベースを採用する人々や会社は減っていった」
とまであったので、おそらくRDBMSでネットワーク型や階層型の再現も可能ということでしょう。

でも、調べてもなぜかexcelのような表形式データ構造の説明ばかりで、
ネットワーク型や階層型の設計方法についての記事は見つけにくいですね。
需要が少ないんでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

マインドマップのデータ形式は、各ノードが自由に線で結ばれている構造になっているので、
普通に素朴に考えると、表形式ではなく、ネットワーク型のデータベースになります。

データ形式はネットワークでも、(ただ保存、読込するだけであれば)真っ正直にネットワーク型のデータベースにする必要はありません

「頂点のデータを入れるテーブル」と、「頂点のID2つを入れて線を表現するテーブル」の2つがあれば、ネットワークとしての表現は保存可能です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/12 00:03

    ご回答ありがとうございます。

    なるほど、そうすればリレーショナルデータベースでもできるんですね…。
    今日はもう眠いので、明日少し考えてみようと思います。

    キャンセル

+1

ネットワーク型データモデル

階層型やネットワーク型のデータモデルを使用したナビゲーショナルデータベースは性能的に有利であったため、大規模アプリケーションで使われ続けたが、ハードウェア性能の向上により、関係モデルの高度な生産性と柔軟性のためネットワーク型データモデルは企業での利用も減っていった。

スタースキーマ

スタースキーマは関係データベースを利用した多次元データベースの実装の一種である。典型的な関係データベースを利用できるため、専用の多次元データベースを用いるよりも、価格や利便性の面で利点がある。

関係データベース(RDB)でも工夫次第でネットワーク型を代用出来ないわけではありません。
ただ、多次元データベースを利用した方が性能は良いかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/12 15:05

    ご回答ありがとうございます。

    調べると、関係(relational)データ構造とは集合論と述語論理における「n項関係」に基づいて、
    「データ同士を論理関係で結びつける構造」
    だそうで、工夫しだいで大体どんなデータ構造も設計可能なようですね。

    でも、なぜかexcelのような表形式データ構造の説明ばかりで、
    ネットワーク型や階層型の設計方法についての記事は見つけにくいですね。
    需要がないんでしょうか。

    実は、
    「表形式のデータテーブル」と「ネットワーク型のデータテーブル」をプライマリーキーを設定して連携する
    ということをしたいと思っています。

    これを実現するには、互換性を考えると、
    当然MySQLのような一本のソフトウェアで一括管理できた方がいいでしょうから、
    MySQLで両方のデータテーブルを作ってやる方がいい気はします。

    その多次元データベースにMySQLと連携可能なソフトウェアがあるなら別ですが…

    まぁ、そこはまた考えようと思います。

    キャンセル

  • 2019/04/12 15:12

    ナイーブツリーに該当するものはアンチパターンに類するもので、RDBMS次第で回避するものですからね。
    MySQLも得意な部類ではないと思いますよ。

    キャンセル

+1

SQL Serever の例ですが、
ネットワーク型には中間テーブルを使った多対多結合を使います。
SQL Serever 2017からはグラフ データベースが追加されました。
階層型には、hierarchyid や XMLデータ型 を使ってます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

-14

机に向かって自分でちょこっと関係データベースシステムで考えてみたところ、
意外と簡単に階層型、ネットワーク型のデータ設計は思いつきました。
関係データ構造の万能性を思い知りました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/21 01:49

    回答あってのことだと思います。自己解決ではありません。

    キャンセル

  • 2019/04/21 04:40

    一体どういった設計なのかの具体性が全くありません。この回答をベストアンサーに選んだと言うことは、他の回答者が言うような「中間テーブル」や「線を表現するテーブル」は作らない設計と言うことでしょうか?他の人には全くどのようなものを思いついたのかわからないため、低評価を入れさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る