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

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

新規登録して質問してみよう
ただいま回答率
85.48%
データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

3回答

4737閲覧

ToDoアプリのDB設計について

nyago49

総合スコア17

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2018/12/04 06:25

編集2018/12/04 06:55

現在ToDoアプリを作っているのですが、DB設計に悩んでいます。

具体的には、タスクを分割しサブタスクとして管理するアプリをイメージしています。
サブタスクがサブタスクを持つ可能性があり、
タスクの並び替えなどもできるようにしたいと考えています。

データ構造としては木構造になっていると思うのですが、
このような場合、どのような手法を使って設計するとよいのかアドバイスをいただければと思います。

よろしくお願いいたします。

追記
画面レイアウトはTodoistと同じようなレイアウトで考えています。
この画像にあるようにタスクに対してタスクを入子にして保存できるようにしたいと考えています。
イメージ説明

ToDoに関する機能でいうと以下になると考えています。

  • タスクを登録できる(入力項目はタイトルと期限)
  • タスクにサブタスクを登録できる
  • タスクは並び替え可能

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

データ構造としては木構造になっていると思うのですが、
このような場合、どのような手法を使って設計するとよいのかアドバイスをいただければと思います。

木構造を表せる構造として一番シンプルなのは(KEY,親KEY)のようなナイーブツリーと呼ばれるものです。
但し、ナイーブツリーはアンチパターンでもあります。
再帰の使用できるRDBMSであればアンチパターンにはならないので、RDBMSの選定も重要事項となります。

投稿2018/12/04 08:40

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyago49

2018/12/06 06:15

ご回答ありがとうございます! ナイーブツリー調べてみました。 教えていただいた通り通常はアンチパターンとされていましたが、PostgreSQLだと再帰が使えるようで大丈夫そうですね! 並び替えのことを考えて経路列挙モデルも良いのかなと思ったのですが、このような場合どちらが良いのでしょうか?
sazi

2018/12/06 06:50

列挙する経路は、再帰の中で組み立てることも可能ですし、取りあえずは、ナイーブツリーとしておき、性能要件を満たさないような箇所が発生した場合に経路列挙モデルとするのが良いかと思います。 但し、その場合はストアド経由とするなどして、SQLの変更の影響箇所を極力少なくすることを考慮しておいた方が良いでしょう。 また、列挙する経路について、postgresなら配列として置いた方が経路の深さが変更になってもカラムを追加する必要がありません。
nyago49

2018/12/06 12:47

返信ありがとうございます! まずナイーブツリーで進めてみます。 postgresの配列についても調べてみます。
guest

0

たとえば、ToDoリストを使ってみよう で、どんなテーブルにどんなカラムが必要か考えて質問に追加し、それで良いか判断を仰いでは?

投稿2018/12/04 06:34

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyago49

2018/12/04 06:56

ご回答ありがとうございます。 リンクを参考にさせていただきます。
guest

0

今どこまでできているかわからないですが
まず画面レイアウトを確定し項目を全て洗い出してください。
「画面は機能」と言うのがよく言われます。
機能を全て洗い出すことでデータの形も決まってきます。
いきなりデータから考えると大体後付が積もり積もって破綻します。

※もし画面レイアウト・項目洗い出しが済んでいるのでしたら
その情報を提示されたほうがより的確な回答が得られると思います

投稿2018/12/04 06:33

編集2018/12/04 06:38
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyago49

2018/12/04 06:57

ご回答ありがとうございます。 指摘いただいたレイアウト、項目を追記したのでご確認いただけたらと思います。 もし過不足、間違い等ありましたらお手数ですが、コメントをいただければ幸いです。
m.ts10806

2018/12/04 06:59

えっと、言葉足らずで申し訳なかったのですが、そのレイアウトを元に考えた設計内容を提示した上でどこが課題かとか問題かとかを質問するようにしないと丸投げになってしまいます。
nyago49

2018/12/06 06:16

こちらこそ申し訳ございません。 今回のようなDB設計が始めてで、どこが課題かもわからない状態でしたのでもう少し自分で調べて考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問