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

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

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

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

NoSQL

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

Q&A

解決済

1回答

2358閲覧

Cloud Firestoreでのテーブル構成について

yy_tn

総合スコア299

Firebase

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

NoSQL

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

0グッド

0クリップ

投稿2019/02/04 00:33

とあるイベントを管理するアプリを作成したく、テーブル設計を行っているのですが
NoSQLでのデータの持ち方として問題無いか、ご意見頂けますと幸いです。

以下のようなテーブルを持とうとしております。
イベントテーブル → イベントの内容、出演者を保持
前売りテーブル → 各ユーザー別に出演イベント、見たい出演者(メイン1人と他)を保持

イベントテーブル

  • id
  • title
  • date
  • actor
    ・id
    ・name
    ・type

前売りテーブル

  • uid
  • eventId
  • mainActorId
  • actor
    ・id
    ・name

アプリ側の機能としては、イベント一覧があり
各ユーザー単位で、イベント一覧から参加するイベントと見たい出演者を選択して参加表明(前売りテーブル登録)
管理者側からは、各イベントで出演者別の前売りユーザー一覧を表示
になります。

通常のRDBであれば、actorは個別のテーブルとして持つ等するかと思いますが…
以下の点が持ち方として合っているかが気になっております。

  • actor(出演者)は別テーブルにせず、イベント・前売り両テーブルに持つので良いか
  • 前売りの内容自体をイベントテーブル内に持つのが良いか

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

actor(出演者)は別テーブルにせず、イベント・前売り両テーブルに持つので良いか

はい、良いと思います。
今回の場合、ユーザーが参加表明する回数の方が、ユーザーが名前(name)を変更する回数を大きく上回るでしょう。
Firestoreはご存知の通りNoSQLです。このように常に非正規化をベースに最適化を図っていくことになります。

前売りの内容自体をイベントテーブル内に持つのが良いか

いいえ、「前売りテーブル」をそのまま別のルートコレクションとして定義されたほうが良いでしょう。
そもそも、イベントテーブル と 参加表明(前売り)テーブルは、扱うデータ(関心事)が違うはずです。
個人的にあまり使いたくないキーワードですが、前者はいわゆるマスタデータ、後者はトランザクションデータ。
RDBでも、トランザクションデータに関しては、その時点の取引を記録(非正規化)し、イミュータブルであるべき(変更すべきでない)です。

最後にNoSQLの理解に役立ちそうな資料を共有しておきます。
https://gist.github.com/matope/2396234
https://qiita.com/Yatima/items/8a54acc8fda3e5fce741

投稿2019/02/08 06:33

xenbeat

総合スコア4258

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

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

yy_tn

2019/02/18 23:23

ありがとうございます。 回答頂いた内容で方向性が見えたように思います。 参考URLもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問