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

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

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

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

【Firebase】【Swift】SNSの友達登録機能を考えた場合のデータベース設計について

street
street

総合スコア0

Firebase

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

1クリップ

2042閲覧

投稿2018/01/31 01:50

お世話になります。

FirebaseのRealtimeDatabaseを用いてSNSの友達登録機能を以下のデータベースで実現しようと考えています。
その中で疑問点があり、正しい設計なのかご相談したく投稿させて頂きました。

ユースケースとして、userID1のtanakaがuserID2のsatoに友達登録する場合です。
具体的には以下のとおりです。

  1. tanakaがsatoのappIDを検索し、userAppIDに存在するか確認する.
  2. 存在していれば、tanakaは自身とsatoのappIDと紐付くfriendID1をfriendListに追加する。
  3. tanakaはsatoのfriendListにもfriendID1を追加する。

この場合、データベース設計は以下を想定しています。

Json

"userList":{ "userID1":true, "userID2":true }, "userAppID":{ "tanaka0701":true, "sato1001":true }, "userInfo":{ "userID1":{ "name":"tanaka", "appID":"tanaka0701", "friendList":{ "friendID1":true } }, "userID2":{ "name":"sato", "appID":"sato1001", "friendList":{ "friendID1":true // userID1がuserID2のfriendListを更新する必要があるか? } }, }, "friendInfo": { "friendID1":{ "sender":"tanaka0701", "reciever":"sato1001", "created":123456 } }

・疑問点 1
3.の時に、tanakaはsatoのfriendList(userInfo/userID2/friendList/)を更新して良いのでしょうか?
tanakaが自分以外のuserInfoを更新することに違和感をもっています。

・疑問点 2
3.の時に、tanakaからの登録通知を受け取るためにsatoはどのデータをオブザーブするべきでしょうか。
userInfo/userID2/friendList/を常時オブザーブするべきでしょうか。

・疑問点 3
ユニークIDとなるfriendID1はchildByAutoId()を用いたものと認識しています。
以下の実装であっていますでしょうか?

Swift

let ref = Database.database().reference() let postRef = ref.child("friendInfo").childByAutoId() postRef.setValue(["sender":"tanaka0701", "reciever":"sato1001", "created":123456]) ref.child("userInfo").child(Auth.auth().currentUser.uid).child("friendList").setValue([postRef.key:true])

お手数ですがご教示お願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Firebase

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています