Je viens de commencer à utiliser firebase pour créer ma première application de chat (réagissez native). Je suis cependant légèrement confus au sujet de la structure idéale que ma base de données devrait avoir. Les documentations Firebase suggèrent que la structure devrait être aussi normalisée que possible, mais le type de requêtes auxquelles j'ai accès pour donner l'impression que la normalisation des données aurait un impact sur les performances.Conseils sur la structure de base de données d'une application de discussion de base de feu
Juste un exemple rapide qui convient à mon cas d'utilisation: Mon rapide, la structure dénormaliser serait:
{
"workgroups": {
"40": {
"id": "40",
"name": "workgroup 1 name",
"messages": {
"message-1-id": {
"id": "message-1-id",
"text": "Message 1 text",
"user": {
"id": "1",
"name": "User 1 name",
"avatar": "http://user1avatar.com"
}
},
"message-2-id": {
"id": "message-2-id",
"text": "Message 2 text",
"user": {
"id": "1",
"name": "User 1 name",
"avatar": "http://user1avatar.com"
}
}
}
}
}
}
L'inconvénient évident étant que si un utilisateur change son avatar seulement les nouveaux messages afficher.
Ma structure normalisée serait:
{
"workgroups": {
"40": {
"id": "40",
"name": "workgroup 1 name",
"messages": {
"message-1-id": {
"id": "message-1-id",
"text": "Message 1 text",
"user": "1"
},
"message-2-id": {
"id": "message-2-id",
"text": "Message 2 text",
"user": "1"
}
}
}
},
"users": {
"1": {
"id": "1",
"name": "User 1 name",
"avatar": "http://user1avatar.com"
},
"2": {
"id": "2",
"name": "User 2 name",
"avatar": "http://user2avatar.com"
}
}
}
je dois chercher tous les messages pour un certain endroit et chaque message aurait besoin d'avoir l'avatar de l'expéditeur et le nom qui lui est connecté. La structure dénormalisée est-elle toujours la meilleure option?
Si la structure normalisée serait encore préférée alors comment devrais-je joindre les tables? Ma première tentative a été d'aller chercher tous les messages dans un endroit, puis d'aller chercher chaque utilisateur pour chaque message mais je doute que ce soit la meilleure solution.
Merci pour votre aide!
Peut-être pas la réponse que vous cherchez, mais je vous suggère de faire quelques courtes expériences à testez vos cas d'utilisation. J'ai restructuré mes données plusieurs fois avant de trouver une approche qui fonctionne pour moi, mais tester et expérimenter est le meilleur moyen de savoir si vous avez des goulots d'étranglement. De plus, une fois que vous avez une structure avec laquelle vous pouvez travailler, n'oubliez pas de créer des index pour les éléments que vous voulez interroger. Et si vous envisagez d'ajouter des règles de sécurité plus tard, faites quelques premières expériences pour comprendre comment cela affectera vos données/requêtes. Bonne chance! – Peter
Oui, je vais certainement faire quelques expériences avant de construire autour d'une structure définie. Il vaut mieux mieux le planifier que de continuer à le changer. Merci – WiserTheBassist