Firebase数据库架构

Gra*_*kos 5 nosql firebase firebase-realtime-database

我无法理解Firebase数据库的工作方式.是的,我知道它是我的数据的JSON,我知道在不同对象之间设置一对多和多对多关系的方法.但有没有办法为数据库设置某种" 架构 "?

一个例子来理解我的意思:如果我使用Firebase SDK创建Android应用程序,我的朋友正在创建一个iOS应用程序.我正在推动这个"users": {name: John, city: LA}.而我的朋友犯了一个错误,推了推{name: Tom, cety: NY}.比试图获得汤姆斯城市 - 我会得到什么?空值?

有没有办法为保存的数据指定结构.在Firebase控制台中,我只看到添加确切值的方法,而不是指定它的结构方式.如何告诉其他开发人员,或者我的用户应该包含的" 我在将来 ",例如"name","gender"和"dog_eyes_color"?希望你能理解我.

Jay*_*Jay 5

要回答您的问题,Firebase是一个无架构数据库.如果将数据推送到节点

users
  uid_0
    name: John
    city: LA
Run Code Online (Sandbox Code Playgroud)

而你的朋友又添加了另一个用户

  uid_1
    name: Frank
    cety: NY
Run Code Online (Sandbox Code Playgroud)

然后,您的用户节点将有两个用户具有不同密钥的子项; 城市与可爱.

正如弗兰克在评论中提到的那样,您可以"捕获"并阻止将数据写入无效的节点.但是,思考这个课程:

class User {
   userId = ""
   name = ""
   city = ""

   func saveToFirebase() {
      myRef.setValue( user id etc etc)
   }
}
Run Code Online (Sandbox Code Playgroud)

并且您告诉您的朋友,他们想要在Firebase中存储用户,以便使用该类.您现在拥有一个与Firebase交互的标准化模型.该类(或结构或您使用的任何类)定义了要使用的模式.

Firebase数据库(NoSQL)提供了一种存储和检索数据的机制,该机制使用关系数据库中使用的表格关系以外的方式建模

并且作为用户问题的后续跟踪:Firebase DOES将"后端"中的用户身份验证数据存储到开发人员无法直接访问(可查询)的位置.这里的想法是,当用Firebase功能(如createUser())在Firebase中创建用户时,会为您提供该用户创建时的用户ID(UID),以及您可以用来在/ users中存储其他信息的用户ID你创建的节点.

users
   uid_0
    name: Frank
    location: LA
    fav_food: Pizza
   uid_1
    name: Leroy
    location: NY
    fav_food: Tacos
Run Code Online (Sandbox Code Playgroud)

.validate ....我不会利用.validate规则来定义结构(模式)或控制其他开发人员.从长远来看,提供诸如上述用户类之类的编码工具将提供更大的灵活性和更少的恶化(和编码),并且将更加可维护.