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

Database design NoSQL数据库设计-可重复数据,database-design,nosql,Database Design,Nosql,例如,我正在学习nosql,并试图了解电影数据库网站的数据库设计会是什么样子?这对我来说是非常困惑的,因为我无法理解我复制了这么多信息的事实。我给你举个例子(也许我没弄好,你可以纠正我): 所以,如果我有一部电影: { "title": "Interstellar", "director": ... ... "genre": [ "Comedy", "Action", ... ], "actors": [ {

例如,我正在学习nosql,并试图了解电影数据库网站的数据库设计会是什么样子?这对我来说是非常困惑的,因为我无法理解我复制了这么多信息的事实。我给你举个例子(也许我没弄好,你可以纠正我):

所以,如果我有一部电影:

{
    "title": "Interstellar",
    "director": ...
    ...
    "genre": [
        "Comedy", "Action", ...
    ],
    "actors": [
        {
            "name": ...
            ...
        },
        {
            "name": ...
            ...
        },
    ],
}
我会在电影之间有很多相同的“类型”和“演员”。这似乎不合逻辑。。。如果我有其他可重复的东西,比如“类别”?如果我想在用户和电影之间建立链接呢?我是说,你明白我在说什么吗?请澄清如何(以及为什么)在nosql中实现这一点


非常感谢。

嗯,对我来说,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 }
    ]
}
这样,您就不必存储每部电影中演员的信息,而只需在需要信息时筛选一个标识符。这样一来,演员就不会存储在每一部电影中,而只会被引用,这样就可以大大减少DB的大小


您可以通过增加或减少冗余来实现这一点,方法有很多种,但最终取决于您想要实现什么。

作为补充说明,您不必使用noSQL。当大多数数据密切相关时,最好使用SQL处理对您有利的关系。当您只需要一个简单的设计并且数据连接较少时,使用noSQL将更容易。如果没有规范,我们无法告诉您什么设计是合适的。遵循已出版的关于信息建模、关系模型和数据库设计的学术教科书。(记录和使用设计的语言和工具手册不属于此类教科书。)(维基文章或网络帖子也不属于此类教科书。)在卡住的地方问一个具体的非重复问题。