NoSQL数据库设计-可重复数据

时间:2020-04-13 18:16:13

标签: database-design nosql

我正在学习nosql,并试图了解例如电影数据库网站的数据库设计如何?这对我来说非常令人困惑,因为我无法避免重复大量信息这一事实。我给你举个例子(也许我做错了,你可以纠正我):

所以,如果我有电影:

{
    "title": "Interstellar",
    "director": ...
    ...
    "genre": [
        "Comedy", "Action", ...
    ],
    "actors": [
        {
            "name": ...
            ...
        },
        {
            "name": ...
            ...
        },
    ],
}

电影之间我会有很多相同的“类型”和“演员”。这似乎不合逻辑...例如,如果我还有其他可重复的内容,例如“类别”?如果要在用户和电影之间建立链接怎么办?我的意思是,您明白我在说什么吗?请说明应如何(以及为什么)在nosql中实现。

非常感谢。

1 个答案:

答案 0 :(得分:0)

对我而言,关于noSQL的魔力在于决定您想要多少冗余。确定何时存储完整的对象或仅存储指向其他集合中另一个对象的指针只是您要做什么的问题。

例如,如果您想存储有关电影以及参与其中的演员的信息,则可以使用以下内容:

{
    movies: [
    {
        name: ...
        genres: ...
        rating: ...
        actors: [ id-actor1, id-actor2, id-actor3]
    }, 
    { 
        name: ...
        genres: ...,
        rating: ...,
        actors: [id-actor2, id-actor4]
    },
    { other bunch of actors }
    ],
    actors: [
    {
        id: id-actor1,
        name: John McActor,
        favorite_food: Tacos
    },
    {
        id: id-actor2,
        name: Jenny McActress,
        favorite_food: Pizza
    },
    { other bunch of actors }
    ]
}

这样一来,您不必在每部电影中都存储有关演员的信息,而只需存储一个标识符即可在需要该信息时对其进行过滤。这样,演员就不会存储在每部电影中,而只会被引用,因此可以将数据库大小减小很多。

可以通过增加或减少冗余来实现多种方法,但这最终取决于您要实现的目标。