正确的扁平化数据模型和 noSQL 数据结构

Correct Flattened Data Model and noSQL data structure

我目前正在使用一项服务构建一个小型应用程序,该服务需要并提倡使用 "flattened" 数据模型(该服务是 Firebase)。

由于我之前没有使用数据模型的经验,我想知道我是否以正确的方式扁平化了我的数据。

这是我开始使用的数据模型模型(它有很多嵌套节点):

// Core data model
    {
        // All registered users 
        "users": {
            // User assigned ID
            "userid": {
                // User information
                "password": "password",
                "email": "test@gmail.com",
                "name": "test",
                // Saved user entries
                "entries": {
                    // Entry ID
                    "entryid": {
                        // Firt part of entry
                        "first": {
                            "one": "yay",
                            "two": "nice",
                            "three": "man"
                        },
                        "second": {
                            "one": "wow",
                            "two": "hmm",
                            "three": "nope"
                        }
                    },

                    "entryid2": {
                        "first": {
                            "one": "kewl",
                            "two": "look",
                            "three": "this"
                       }
                    }
                }
            },
            "id2": {
                // ... and so on
            }
        }
    }

这是我的 "flattened" 版本:

// Flattened model
    {
        // All registered users 
        "users": {
            // User assigned ID
            "userid": {
                // User information
                "password": "password",
                "email": "test@gmail.com",
                "name": "test"
            },
            "userid2": {
                // ... and so on
            }
        },
        // All user entries
        "entries": {
            // User assigned UD (entries for particular user)
            "userid": {
                "first": {
                    "one": "yay",
                    "two": "nice",
                    "three": "man"
                },
                "second": {
                    "one": "kewl",
                    "two": "look",
                    "three": "this"
                }
            },
            "userid2": {
                "one": "wow",
                "two": "hmm",
                "three": "nope"
            }
        }
    }

了解这是否是一种以扁平化方式组织数据的正确(或至少可能)方式将非常有帮助。

确实没有 100% 正确的数据存储方式。它结合了从精神开销角度来看对您有用的方法和您正在使用的任何商店的技术限制。

虽然 Firebase 确实提倡 'flat data structure' 你的任何一个代码示例都没有接近他们的技术极限。

来自Understanding Data Docs

A child node's key cannot be longer than 768 bytes, nor deeper than 32 levels

无论哪种方式,你都只会深入几个节点,我建议你选择你能理解和最好地沟通的数据模型,因为你不太可能 运行 陷入你所处范围内的技术限制上面已经发帖了