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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

1回答

1987閲覧

MongoDBでのデータ設計(コードの扱い)について

TakahiRoyte

総合スコア36

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

1クリップ

投稿2018/04/18 04:49

NoSQL (MongoDB) でのデータ設計について悩んでいます。

例えば書類申請データがあり、1つの申請に対して「申請中」「承認」「否認」のいずれかのステータスが設定されるとします。

RDBの場合は、以下のように正規化をするとします。

申請ID申請者ステータスID
1佐藤0
2佐藤1
3山田9
ステータスIDステータス名
0申請中
1承認
9否認

この場合JOINをしてステータス名を取得し1つのデータとしてまとめると思います。

これがMongoDBなどのドキュメント指向データベースになった場合は、ステータスをどう持つのが良い設計なのでしょうか。アプリケーションによりけりとしか言えないというような気もしますが……

  • ステータスIDとステータス名を持つ場合
{ "application_id": 1, "applicant_name": "佐藤", "status_id": 0, "status": "申請中" }
  • ステータスをオブジェクトとして持つ
{ "application_id": 1, "applicant_name": "佐藤", "status": { "id": 0, "name": "申請中" } }
  • ステータス名のみ
{ "application_id": 1, "applicant_name": "佐藤", "status": "申請中" }

あまり、ステータスIDというフィールドをNoSQLにおいて持つことにメリットを見い出せません。処理中の分岐とかで使うくらいでしょうか。それすらもステータス名でやってしまえば良いような気がしています。

ステータス名をあとから変えたいケースも考えられますがNoSQLであれば保存されているデータもすべて上書きする必要はどうしてもでてくると思うので、これもメリットとしては薄く見えます。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

あまり詳しくないですが、今までの経験で話しますと。

MongoDBはドキュメントストア型ですから
行をドキュメントと置き換える(ドキュメント内にドキュメントを埋め込める)ことで
スパース(疎データ)に対処できるようになっていますが、
インデックスを明示的に設定する必要がありますし、インデックスの個数にも制限があります。
#ただしパフォーマンスを考えると、できるだけインデックスは少ないほうが良いので問題にはならない

またその機構上、結合に制約があったり、全文検索に弱いなどという欠点もあります。

仰られるとおり、リレーショナルDBとは違いますので、
ステータスIDとステータス名を持つ場合は、両方持たせる名称のみ持たせるかになります。
どちらを取るかは、アプリケーション側で簡単に利用しやすい方を選べば良いと思います。
今のところ他のやり方は、見たことがありませんね。

■FYI
MongoDBにおけるスキーマ
MongoDBのスキーマデザインする時の3つのポイント
MongoDBにおける関連(Relation)のスキーマ設計

投稿2018/04/18 05:49

lazhuward

総合スコア1294

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

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

TakahiRoyte

2018/04/18 07:55

ありがとうございます。 経験者の方から後押しいただけて安心できました。 参考リンクも非常に勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問