Firebase:我应该如何构建我的数据库?就像Offerup和Letgo一样

时间:2018-02-23 00:01:35

标签: ios swift firebase firebase-realtime-database nosql

我目前正在构建一个iOS应用程序,它基本上允许用户发布他们想要销售的商品,然后其他用户可以根据位置搜索要购买的商品。我应该如何构建我的数据库?

我目前有以下结构:

users {
    userID: {
        profileImage:
        username:
    }
    .
    .
    .
}


posts: {
    userID: {
        postID: {
            description:
            imageUrl:
            creationDate:
            price:
            location:
        }
        .
        .
        .
        .
    }
    .
    .
    .
    .
}

希望我所要求的是有道理的。换句话说,像OfferUp或Letgo这样的应用程序如何构建他们的数据库?感谢!!!

2 个答案:

答案 0 :(得分:1)

很难说 - 这取决于您的应用程序的其余部分是如何工作的,但是IMO而不是postID userID下的userID,您最好将posts: { postID: { description: imageUrl: creationDate: price: location: userID: } } 添加到posts邮政对象。

editable/writeable

原因;

  • 允许您在所有项目中运行搜索,您不需要搜索每个用户 - 然后搜索每个项目。深度搜索记录是不可能的。

  • 您的数据库规则可以保持auth.uid可读,但userID = userID只有set

  • 通过这种方式嵌套,仍然可以UIDoc.Document

答案 1 :(得分:1)

我唯一要改变的是,如果您希望能够显示待售物品的列表,则应将列表所需的信息提取到另一个根级别的集合中。您应该在该部分中添加较少的细节,因为Google表示它将允许更快地下载数据,同时使用更少的数据。 (来源:https://firebase.google.com/docs/firestore/manage-data/structure-data

所以,像这样:

{
    users: {
        userID: {
            profileImage:
            username:
        }
        .
        .
        .
    }


    posts: {
        zipCode: {
            postID: {
                userID: 
                description:
                imageUrl:
                creationDate:
                price:
                location:
            }
            .
            .
            .
            .
        }
        .
        .
        .
        .
    }

    listOfPosts: {
        zipCode: {
            postID: { //Only put essential information for your list of posts here
                imageURL:
                price:
                location:
            }
        }
    }
}