Несколько советов о том, как смоделировать эту базу данных - PullRequest
1 голос
/ 13 января 2012

Я настраиваю сайт, на котором будут пользователи. Пользователи могут искать песни и (если они вошли в систему) сохранять их в плейлист или в свою библиотеку песен.

Я хочу, чтобы это было похоже на 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?)
});

Это кажется лучшим? Я привык к реляционному взаимодействию, поэтому кажется, что есть много дубликатов, но мне было трудно его нормализовать так, чтобы это работало.

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Выглядит разумно для меня. Хотя в этом дизайне вы не можете поддерживать заказные плейлисты. Я бы включил ObjectId для списка воспроизведения и положение в списке воспроизведения в массиве списка воспроизведения, если вы хотите поддерживать эту функцию.

1 голос
/ 13 января 2012

Добро пожаловать в Монго!

Звучит хорошо, просто убедитесь, что у вас есть указатель на songs.playlist

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

Возможно, имеет смысл делать библиотеки / плейлисты одинаковыми, просто имейте название объекта библиотеки "Библиотека"

...