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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

NoSQL

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

Q&A

0回答

943閲覧

Firebaseのデータ構造について相談したい

takanakahiko

総合スコア10

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

NoSQL

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

0グッド

0クリップ

投稿2018/04/07 03:13

はじめに

Firebaseで「プリパラ」といったアニメのデータを集約できるようなプラットフォームを作ろうとしています.
FirebaseのRealtimeDBを用いてデータを管理しようと考えていますが,データ構造の設計に自信がありません.
以下に,私が仮として作ったサンプルを載せますので,意見や提案をいただけると嬉しいです.
また,何か追加で情報が必要な場合は遠慮なく言ってください.

想定しているシステム

前提

  • 各エピソードでライブが行われます
  • ライブは,任意のチームが,任意の曲を歌い,任意の演出(MD)を行います
  • ライブをする際に,各キャラクターは衣装(コーデ)を着ます

使用例

  • 任意のチームが出演するライブ一覧を取得する
  • 任意のチームが歌う曲一覧を取得する
  • 任意の曲がライブされるエピソード一覧を取得する

データの構造

構造を書いてみました.
[hoge]は繰り返しの要素名です.

- songs - [曲名] - teams - [チーム名] : true - characters - [キャラクター名] - teams - [チーム名] : true - teams - [チーム名] - members - [キャラクター名] : true - songs - [曲名] : true - MDs - [MD名] : true - MDs - [MD名] - team : チーム名 - lives - [ライブID] : true - series - [シリーズ名] - start_at : 日付 - end_at : 日付 - episodes - [話数] : エピソードID - episodes - [エピソードID] - number : 話数 - series : シリーズ名 - title : タイトル名 - brands - [ブランド名] - coordinates - [コーデ名] : true - coordinates - [コーデ名] - brand : ブランド名 - character : キャラクター名 - live - [ライブID] - MD : MD名 - coordinates - [コーデ名] : true - time - start_at : 開始時間 - end_at : 終了時間 - episode : エピソードID - song : 曲名 - team : チーム名

作ったサンプル

json:sample.json

1{ 2 "songs":{ 3 "Make it!": { 4 "teams": { 5 "らぁら & みれぃ":true 6 }, 7 "lives": { 8 "任意のID_A": true, 9 "任意のID_B": true 10 } 11 }, 12 "ま~ぶるMake up a-ha-ha!": { 13 "teams": { 14 "らぁら & みれぃ":true 15 }, 16 "lives": { 17 "任意のID_C": true 18 } 19 } 20 }, 21 "characters":{ 22 "真中 らぁら":{ 23 "teams":{ 24 "らぁら & みれぃ": true 25 } 26 }, 27 "南 みれぃ":{ 28 "teams":{ 29 "らぁら & みれぃ": true 30 } 31 } 32 }, 33 "teams": { 34 "らぁら & みれい": { 35 "members": { 36 "南 みれぃ": true, 37 "真中 らぁら": true 38 }, 39 "songs":{ 40 "Make it!":true, 41 "ま~ぶるMake up a-ha-ha!": true 42 }, 43 "MDs":{ 44 "Let`s GOプリパラ": true 45 } 46 } 47 }, 48 "MDs": { 49 "Let`s GOプリパラ": { 50 "team": "らぁら & みれぃ", 51 "lives": { 52 "任意のID_A": true, 53 "任意のID_B": true 54 } 55 }, 56 "もぎたて!スイーツパーク": { 57 "team": "らぁら & みれぃ", 58 "lives": { 59 "任意のID_C": true 60 } 61 } 62 }, 63 "series": { 64 "プリパラ": { 65 "start_at": "TODO", 66 "end_at": "TODO", 67 "episodes":{ 68 "1":"任意のID1", 69 "2":"任意のID1", 70 "6":"任意のID1" 71 } 72 }, 73 "アイドルタイムプリパラ": { 74 "start_at": "TODO", 75 "end_at": "TODO", 76 "episodes":{ 77 78 } 79 } 80 }, 81 "episodes": { 82 "任意のID1": { 83 "number": 1, 84 "series": "プリパラ", 85 "title": "アイドル始めちゃいました!" 86 }, 87 "任意のID2": { 88 "number": 2, 89 "series": "プリパラ", 90 "title": "約束やぶっちゃダメぷりっ!" 91 }, 92 "任意のID3":{ 93 "number": 6, 94 "series": "プリパラ", 95 "title": "異議あり?らぁらがウチにやってきたっぷり!" 96 } 97 }, 98 "brands":{ 99 "Twinkle Ribbon":{ 100 "coordinates": { 101 "キューティーリボン": true 102 } 103 104 }, 105 "Candy Alamode":{ 106 "coordinates": { 107 "もぎたてライム": true, 108 "もぎたてオレンジ": true 109 } 110 } 111 }, 112 "coordinates": { 113 "キューティーリボン":{ 114 "brand":"Twinkle Ribbon", 115 "character":"真中 らぁら" 116 }, 117 "ワンダーランドマカロン":{ 118 "brand":"Twinkle Ribbon", 119 "character":"真中 らぁら" 120 }, 121 "もぎたてライム":{ 122 "brand":"Candy Alamode", 123 "character":"南 みれぃ" 124 }, 125 "もぎたてオレンジ":{ 126 "brand":"Candy Alamode", 127 "character":"真中 らぁら" 128 } 129 }, 130 "live": { 131 "任意のID_A": { 132 "MD": "Let`s GOプリパラ", 133 "coordinates":{ 134 "キューティーリボン": true 135 }, 136 "time": { 137 "start_at": "20:00", 138 "end_at": "23:00" 139 }, 140 "episode": "任意のID1", 141 "song": "Make it!", 142 "team":"らぁら & みれぃ" 143 }, 144 "任意のID_B": { 145 "MD": "Let`s GOプリパラ", 146 "coordinates":{ 147 "ワンダーランドマカロン": true 148 }, 149 "time": { 150 "start_at": "20:00", 151 "end_at": "23:00" 152 }, 153 "episode": "任意のID2", 154 "song": "Make it!", 155 "team":"らぁら & みれぃ" 156 }, 157 "任意のID_C": { 158 "MD": "もぎたて!スイーツパーク", 159 "coordinates": { 160 "もぎたてライム":true , 161 "もぎたてオレンジ": true 162 }, 163 "time": { 164 "start_at": "20:00", 165 "end_at": "23:00" 166 }, 167 "episode": "任意のID3", 168 "song": "ま~ぶるMake up a-ha-ha!", 169 "team": "らぁら & みれぃ" 170 } 171 } 172}

補足

何か根本的に間違えている可能性があるので,遠慮なく指摘していただけると助かります.

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問