【问题标题】:Some advice on how to model this database关于如何对该数据库建模的一些建议
【发布时间】:2012-01-13 17:46:31
【问题描述】:

我正在建立一个拥有用户的网站。用户可以搜索歌曲并(如果已登录)将其保存到播放列表或歌曲库中。

我希望它像 iTunes 一样,播放列表中的所有歌曲都是库的一部分,因此当用户选择查看他们的歌曲库时,播放列表中的歌曲以及刚刚添加的歌曲都会显示去图书馆。我希望一首歌曲能够存储在多个播放列表中。

现在我正在使用 Mongodb,做这样的事情:

var UserSchema = new Schema();

var Library = new Schema({
    songs: [SongsSchema],
    user: Schema.ObjectId
});

var Playlist = new Schema({
title: String,
description: String,
user: Schema.ObjectId   
});

var SongsSchema = new Schema({
position: Number,
name: String,
artist: String,
    artistGid: String,
album: String,
    albumGid: String
time: Number,
url: String,
    gid: String,
    location: String (either youtube, vimeo, soundcloud for now),
    playlist: [Schema.ObjectId] (array of object ids that point to playlists?)
});

这看起来是最好的吗?我习惯了关系,所以看起来有很多重复,但我很难以一种可行的方式对其进行规范化。

【问题讨论】:

    标签: mongodb database-design relational-database database-schema nosql


    【解决方案1】:

    在我看来是合理的。虽然在这个设计中你不能支持有序的播放列表。如果您想支持该功能,我将同时包含播放列表的 ObjectId 和播放列表数组中播放列表中的位置。

    【讨论】:

    • 啊,确实需要。那在猫鼬身上会是什么样子?播放列表:[Schema.ObjectId, Integer] ?
    • 从未使用过 Mongoose,但我认为您正在寻找嵌入式文档:mongoosejs.com/docs/embedded-documents.html 也许是您嵌入在播放列表中的 PlaylistEntry 架构。
    【解决方案2】:

    欢迎来到 Mongo!

    这听起来不错,只要确保您在歌曲播放列表上有一个索引

    db.collection.ensureIndex({"songs.playlist": 1})
    

    将库/播放列表设为相同可能是有意义的,只需将库对象的标题设为“库”

    【讨论】:

    • 嗯。因此,就像让播放列表模型包含歌曲的嵌入式文档一样。并有一个存储添加到库中的歌曲。然后在显示库时,只显示库“播放列表”中的所有歌曲以及用户播放列表中的所有歌曲,但去掉重复项。这似乎是目前最好的方法
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多