2010-12-02 18 views
0

Je crée des profils d'utilisateur sur mon site et perdu sur la façon de concevoir ceci: Il y a beaucoup de champs, certains sont 1: 1 comme la ville de résidence, d'anniversaire, etc. 50 champs qui sont 1: plusieurs (ou plusieurs à plusieurs?) Comme les films préférés, les équipes sportives, les préférences de rencontres, les pseudos, les numéros de téléphone, les adresses e-mail, etc ... Cela devient plus complexe quand nous avons déjà travaillé dans des écoles précédentes. Une personne peut appartenir à de nombreuses entreprises et il y a beaucoup de domaines dans ce groupe comme Date de travail, département, nom de l'entreprise, nom de l'industrie, etcréseau social - question de schéma de profil d'utilisateur

Alors la question est de savoir comment stocker tout cela? Si nous normalisons tous ces champs de profil, il y aura beaucoup de nombreuses tables à rejoindre. Pour autant que je lis, pour les réseaux sociaux, les gens recommandent une approche dénormalisée. Mais de toute façon, je stocke tous les détails de l'utilisateur et les détails du profil dans la table de l'utilisateur principal, de sorte que chaque ligne est un utilisateur unique. Si je devais stocker toutes ces préférences multiples, esp comme les films préférés peuvent aller dans les centaines et les compagnies passées ont un ensemble de champs, donc il y aura beaucoup de doublons dans la table des utilisateurs.

Quelle approche les réseaux sociaux prennent-ils pour cela?

Répondre

3

Les questions de stockage de données de réseau social ne sont pas vraiment différentes des questions de stockage de données en général ... les données normalisées et connexes sont le meilleur moyen de «stocker» ces données efficacement. Le RDBMS est fait pour gérer ces relations - les relations PK-FK et JOINS sont le point MAIN des DB relationnelles ... donc même si vous voyez "join join join etc, le DB est (devrait être) efficace dans la gestion de ces jointures .

du point de vue USAGES d'obtenir les données pertinentes - assurez-vous que vos index sont exacts et optimisés - et utiliser une vue sur « aplatir » les données nécessaires à des fins d'affichage ...

Alors tout le serveur d'applications que vous utilisez pour obtenir les données appellera la vue - qui apparaîtra à vous, le développeur, comme une représentation plus plate des données, rendant l'interaction sereur UI et APP plus propre et plus efficace (à la fois dans les ressources, et en codage),

en règle générale - l'aplatissement des données est généralement considéré comme «acceptable» dans un environnement d'entreposage de données ... bien sûr, je ne sais pas quoi ouvrir le débat monstrueux de «juste comment normalisé, est« normalisé »» (d'abord - sixième forme de normalisation ...)

Je suppose que vous pourriez penser à un SN comme plus d'un OLAP, que l'OLTP. Dans ce cas, «certains» stockage de données dénormalisé est commun - et acceptable - vraiment, vous devez décider à quel point vous voulez normaliser les choses ... Par exemple - dans vos exemples, de l'histoire de l'emploi et des films, du sport. Je pense qu'un simple 1: plusieurs entrées permettant en double sur ces articles serait bien, et sans doute plus facile à entretenir ...

espoir qui a été utile,

+0

Mais pourquoi les gens vont-ils alors la voie dénormalisée pour les réseaux sociaux? Ou est-ce juste parce que les grands comme Facebook et google le font pour que le monde les copie? – earl

+0

Je veux dire "Oui, à peu près". Mais cela risquerait de déclencher une guerre de flamme. Je viens d'augmenter la réponse à la place. – Ronnis

0

Vous devez en tenir à la stratégie de normalisation de Créer votre schéma. La requête peut être une douleur que vous devez gérer avec une extrême prudence, surtout lorsque vous faites des jointures. Si vous êtes un développeur de points, je suppose que LINQ gérera la douleur pour vous. Je crois que votre RDMS est assez intelligent pour gérer requêtes avec une grande performance. Une chose à noter est votre structure de requête.Écrire des requêtes basées sur les performances.Comme je l'ai dit, LINQ devrait faire mieux .... acclamations