Firebase数据库架构

时间:2017-01-03 23:39:19

标签: firebase firebase-realtime-database nosql

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

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

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

2 个答案:

答案 0 :(得分:5)

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

users
  uid_0
    name: John
    city: LA

并且您的朋友添加了另一个用户

  uid_1
    name: Frank
    cety: NY

然后,您的用户节点将拥有两个具有不同密钥子项的用户;城市与安全。

正如弗兰克在评论中提到的,你可以“捕获”并阻止数据被写入无效的节点。但是,请考虑这个课程:

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

   func saveToFirebase() {
      myRef.setValue( user id etc etc)
   }
}

您告诉您的朋友,他们想要在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

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

答案 1 :(得分:1)

这种实现方式怎么样

class User {
  constructor(name, city) {
    this.name = name;
    this.city = city;
    return {
      name: this.name,
      city: this.city,
    };
  }
}

const saveDocument = function (collectionName, obj) {
  db.collection(collectionName)
    .add(obj)
    .then((docRef) => {
      console.log("Document written with ID: ", docRef.id);
    })
    .catch((error) => {
      console.error("Error adding document: ", error);
    });
};



saveDocument("user", new User("Jhon", "NY"));