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であれば保存されているデータもすべて上書きする必要はどうしてもでてくると思うので、これもメリットとしては薄く見えます。
以上よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/18 07:55