Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何正确构造Firebase数据库?_Ios_Swift_Firebase_Data Structures_Firebase Realtime Database - Fatal编程技术网

Ios 如何正确构造Firebase数据库?

Ios 如何正确构造Firebase数据库?,ios,swift,firebase,data-structures,firebase-realtime-database,Ios,Swift,Firebase,Data Structures,Firebase Realtime Database,我阅读了一些Firebase数据库结构指南,了解如何正确构造数据(无数据嵌套),但我有一个问题。 所以,我有一个使用Firebase数据库的iOS应用程序。用户需要登录/注册。 就数据结构而言,我的数据库如下所示: -Database ---Users -----User1 --------username: johndoe ---------email: johndoe@test.com ---------display_name: John Doe -----User2 {....} ---

我阅读了一些Firebase数据库结构指南,了解如何正确构造数据(无数据嵌套),但我有一个问题。 所以,我有一个使用Firebase数据库的iOS应用程序。用户需要登录/注册。 就数据结构而言,我的数据库如下所示:

-Database
---Users
-----User1
--------username: johndoe
---------email: johndoe@test.com
---------display_name: John Doe
-----User2 {....}
-----User3 {....}
现在,让我们假设我有10万用户。每次注册新用户时,我都会检查用户名和电子邮件是否已经存在于数据库中,如果没有,则创建新用户帐户


我的问题是-我是否需要创建一个只包含用户名的新对象和另一个只包含电子邮件的对象?我问这个问题是因为我担心如果我迭代用户对象,我可能会下载数百兆字节,只是为了检查用户名和电子邮件是否已经存在

Firebase不允许重复用户(身份验证名称)。因此,当您调用createUser时,如果用户已经存在,firebase将返回一个错误

其次,如果您在Firebase中为特定项目执行一个测试,则除非找到该项目,否则您不会下载任何内容。因此,无论是它的10个或10万个用户节点,在执行查询时,除了与查询匹配的节点外,不会下载任何内容,只有在存在重复用户时才会下载。不过,这也是不需要的,因为Firebase拒绝重复的身份验证名称

并澄清,;嵌套节点没有问题。然而,根据您的用例,保持它们平坦通常更好。所以,如果你不需要的话,不要过度复杂你的结构


哦,你的火基结构也很到位。继续这样做。

创建两个新节点,其中存储所有用户名和电子邮件。接下来,制作一个firebase数据库规则,其中!data.exists()在write函数中显示。这样:用户根本不下载数据&它是100%安全的,他们的用户名不可能存在重复。你的方法不好:下载数据->检查是否存在->上传用户名。因为它是异步的,所以可以有两个相同的用户名。这个评论不准确,而且有两个用户名与Firebase的异步无关。好吧,我对所有的评论和人们说不同的话感到有点困惑。但是你的回答有点道理。基于此,我现在对数据库的结构没有任何改变。因此,当调用createUser时,我不会下载整个用户节点以及其中列出的每个用户,除非在某些用户节点中实际找到用户名。对吗?PS:这是Firebase结构中最简单的部分,我想我必须针对更复杂的内容发布另一个问题。@Dani调用createUser时,它将向完成块提供内容:user,error。如果createUser成功,FIRUser将在块中返回uid等。如果createUser失败,将填充错误,指明失败的原因-其中一个错误是使用中的用户名FirautherRorCodeEmailReadyUse。此时,您要求用户使用不同的用户名。不要“扫描”数据库以查看新用户名是否正在使用,没有必要这样做。只需依靠createuser来表明这一点。如果答案有帮助,一定要接受它,这样才能帮助别人!