Question

Je suis en train de créer un site Web qui aura des utilisateurs. Les utilisateurs peuvent rechercher des chansons et (si elle est signée dans) les sauver à une liste de lecture ou leur bibliothèque de chansons.

Je veux que ce soit comme iTunes que toutes les chansons sur les listes de lecture font partie de la bibliothèque ainsi quand les droits incorporels utilisateur pour afficher la bibliothèque de chansons, les chansons sur les listes de lecture sont présentés ainsi que les chansons venez d'ajouter à la bibliothèque. Je voudrais une chanson pour pouvoir être stockés dans plusieurs listes de lecture.

En ce moment je suis en utilisant MongoDB, faire quelque chose comme par exemple:

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?)
});

D'autres idées?

modifier: Plus de détails:

Alors qu'est-ce que j'ai est un utilisateur, bibliothèque, playlist, et le modèle de la chanson.

Essentiellement, je suis en train de modèle quelque chose comme iTunes.

Un utilisateur dispose d'une bibliothèque et la bibliothèque appartient à cet utilisateur. Un utilisateur peut avoir plusieurs listes de lecture et la liste de lecture appartient à l'utilisateur. Une chanson peut être dans de nombreuses bibliothèques d'utilisateurs différents et de listes de lecture différentes qui appartiennent à différents utilisateurs ou le même utilisateur (peut-être même sur la même liste de lecture plusieurs fois?).

Lorsqu'un utilisateur visite une page, ils peuvent ajouter des chansons à une liste de lecture et aussi une liste de leurs listes de lecture en cours et leur bibliothèque. S'ils cliquent sur la liste de lecture, il affichera toutes les chansons sur cette liste de lecture s'ils cliquent sur la bibliothèque, il affichera toutes les chansons de leur bibliothèque (donc comme iTunes toutes les chansons sur toutes les listes de lecture et les venez d'ajouter à la bibliothèque).

Je ne sais pas de la meilleure façon de modéliser cela.

Était-ce utile?

La solution

NOTE aux personnes avec les doigts de downvote qui piquent: Je sais que OP a posé des questions sur MongoDB et la réponse qui suit est SGBDR. Toutefois, si vous consultez les commentaires que vous verrez que je ne demande pourquoi la réponse de MongoDB et OP est une présomption de nécessité en raison de la performance. Comme personne est sortie avec une réponse centrée sur Mongo en quatre jours, je vais offrir ma suggestion, qui est de laisser SGBDR faire ce qu'il est bon.


Raladical, comme je l'ai indiqué dans mes commentaires à votre question, je pense que ce que vous essayez de construire est parfaitement adapté au modèle de données relationnelles. Voici une esquisse de modèle de données rapide:

Croquis modèle de données

Ce modèle fait les hypothèses suivantes:

  • Les utilisateurs peuvent avoir exactement une bibliothèque.
  • Les utilisateurs peuvent avoir plusieurs listes de lecture.
  • Les morceaux peuvent apparaître dans un certain nombre de listes de lecture.
  • Les utilisateurs ne peuvent mettre des chansons dans une liste de lecture si elle est déjà dans leur bibliothèque (Notez qu'il existe un moyen facile autour de cela si ce n'est pas votre intention.)
  • En fonction des contraintes que vous mettez sur LIBRARY_ITEM et PLAYLIST_ITEM vous pouvez avoir la même chanson exactement une ou plusieurs fois dans la bibliothèque et une liste de lecture donnée.

Vous pouvez également étendre ce modèle facilement à Normaliser pour des choses comme artiste et peut-être même lieu, si cela a du sens dans votre application.

Ce modèle est normalisé (3FN) et si vous indexez correctement, il sera très performant. Si vous voulez vraiment MongoDB ou s'il y a quelque chose d'autre au sujet de votre système qui est bien adapté pour ensuite non-relationnelle vous pouvez certainement le faire de cette façon. Sinon, vous devriez penser à SGBDR pour celui-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top