Eh bien, je dois choisir pour moi quelle pratique serait mieux à utiliser. J'essaie d'expliquer ce que je veux dire. Par exemple, j'ai la table et aussi, je souhaite implémenter la table Approche # 1 - Utilisez la chaîne pour stocker des identifiants de chansons P> chansons code>: listes de lecture code>. Et je ne sais pas exactement, quelle pratique serait mieux. P> Playlists CODE> Table: P> Id | PlaylistId | SongId
---+------------+---------
1 | 1 | 1
2 | 1 | 2
4 | 1 | 344
5 | 1 | 45
6 | 1 | 57
3 Réponses :
Ceci est trop long pour un commentaire. P>
playlistsongs code> - une relation de plusieurs à plusieurs - est la bonne façon de stocker les données. Voici quelques raisons: p>
Certes, une relation beaucoup à de nombreuses personnes requises comme la table de la liste de lecture n'a clairement pas de valeurs atomiques plutôt qu'un cluster pour la même colonne que playlistid code> dans ce cas. Généralement, il s'agit de la meilleure pratique que nous suivons pour rencontrer des données redondance / duplicats / atomicité (la règle du pouce comme dans ce cas pour appliquer toute normalisation (division des tables)). La contrainte d'intégrité des données soit acide (atomicité, cohérence, isolement, durabilité) p>
Vous irez sûrement pour un scénario de relation homme-de-vin, comme vous l'avez expliqué dans l'approche n ° 2 en créant une table de playlistsongs. Cela convient vraiment à un scénario de base de données relationnelle dans une SGBDM. Considérez les avantages que vous obtenez comparativement à votre première approche dans les scénarios suivants. P>
1.) Problèmes de cohérence des données, par exemple, comment si vous souhaitez supprimer une chanson de la table des chansons qui est jointe à un album. La première approche ne vous limiterait pas de le faire, mais dans la deuxième approche, vous pouvez créer des relations clés étrangères qui déclencheraient des erreurs. P>
2.) Les données jointes. Par exemple, en utilisant SQL, vous pouvez utiliser Joindre pour obtenir toutes les chansons disponibles dans un album donné, mais dans la première approche, vous devrez d'abord faire des manipulations de chaîne manuelles pour extraire des identifiants de sortie, puis sortir des enregistrements de morceau individuellement (à la fois terrible pour Programmation et hectique sur la machine) P>
3.) Vous avez la prise en charge du SQL complet à votre extrémité pour interroger des dizaines de scénarios pour signaler, par exemple, utilisez le nombre de chansons pour obtenir le nombre de chansons dans un album donné, etc., etc. P>
merci. p>
Utilisez définitivement une table de plusieurs à plusieurs, mais il n'a besoin que de la chanson et de la liste de lecture dont il n'a pas besoin de sa propre carte d'identité, à moins que vous ne souhaitiez pouvoir associer la même chanson avec la même playlist plus d'une fois.
Absolument option deux. L'option on est plus comme le texte décrivant les données. Ce ne sont pas des données relationnelles. Pour illustrer, imaginez essayer d'écrire des requêtes qui ont essayé de rechercher des listes de lecture pour certaines chansons ou de rejoindre des tables ensemble. Ce serait vraiment laid avec l'option 1 mais facile avec l'option 2.