2017-09-21 2 views
0

Désolé pour le titre cryptique. Je suis nouveau sur Firebase db. Je l'utilise avec AngularFire (ng4). Je travaille sur un site web sur les étalons (chevaux). Chaque étalon a un propriétaire et un propriétaire peut avoir plusieurs étalons. Chaque étalon est également enregistré avec un ou plusieurs stud-books et un stud-book a plusieurs étalons. J'ai maintenant 3 nœuds de haut niveau: étalons, propriétaires et studbooks.Comment gérer le noeud de jointure dans Firebase db

J'ai un formulaire pour ajouter ou éditer un étalon. Ce formulaire a des boîtes de sélection avec tous les propriétaires possibles et tous les livres généalogiques possibles. Quand je sauve l'étalon, le nœud du propriétaire entier et les nœuds du stud-book sont sauvegardés dans le nœud de l'étalon. Cette partie fonctionne bien.

Une nouvelle page montrera les détails du stud-book et tous ses étalons. Avec cette partie, je me bats. J'ai beaucoup lu et je pense avoir besoin d'un noeud de jointure (studbook_stallions) où je mets la clé du studbook et toutes les clés d'étalons (ou des items entiers?) Qui font partie de ce studbook. J'ai raison, jusqu'ici? Lorsque j'ajoute un étalon, je peux également ajouter une entrée dans le nœud de jointure, mais qu'en est-il de la modification d'un étalon? Dois-je d'abord vérifier si l'étalon est déjà dans le noeud de jointure? Cela ne va-t-il pas affecter les performances?

Ceci est ma méthode add étalon:

addStallion(alias: string, formValues: Stallion): any { 
    formValues.updated = firebase.database["ServerValue"]["TIMESTAMP"]; 
    return this.af.database.ref().child("stallions/" + alias).set(formValues); 
} 

Et voici ma mise à jour méthode étalon:

updateStallion(alias: string, formValues: Stallion) { 
    formValues.updated = firebase.database["ServerValue"]["TIMESTAMP"]; 
    this.af.object("stallions/" + alias).update(formValues); 
} 

Comment changer ces méthodes pour modifier également le noeud de jonction (studbook_stallions)?

Et une question similaire. J'ai maintenant tout le nœud propriétaire dans mon nœud d'étalon. Comment puis-je mettre à jour ce noeud propriétaire lorsque je mets à jour mon propriétaire? Ceci est ma mise à jour méthode propriétaire:

updateOwner(alias: string, formValues: Owner) { 
    formValues.updated = firebase.database["ServerValue"]["TIMESTAMP"]; 
    this.af.object("stallions/" + alias).update(formValues); 
    // Also update in stallion node: 
    // ????????????? 
} 

[Modifier]

Ceci est mon nœud étalon:

enter image description here

Ceci est mon nœud propriétaire:

enter image description here

A ce moment, le noeud d'étalon possède les données complètes du propriétaire, mais le noeud propriétaire n'a pas encore les données d'étalons complètes. Je vais bientôt changer.

Je n'ai pas encore modélisé le studbook, parce que je ne suis pas sûr du meilleur workflow. Mon stud-book aura plusieurs étalons. Quand je mets à jour mon étalon, je dois aussi mettre à jour le même étalon dans le nœud du studbook. Mais comment puis-je savoir quel étalon se trouve dans le nœud du studbook? Et pareil dans l'autre sens. Je mets à jour mon studbook et je dois maintenant mettre à jour le studbook dans plusieurs noeuds d'étalons.

Répondre

0

L'affichage de votre structure de base de données serait ici aider beaucoup à visualiser votre base de données, mais je pense que ce que vous cherchez ici est de mettre à jour plusieurs nœuds enfants en même temps, et c'est comment vous le faire:

var childUpdates = []; 

childUpdates[ '/stallions/' + yourStallionID ] = someDataHere; 

childUpdates[ '/stallionOwners/stallions/' + yourStallionID ] = someOtherDataHere; 

firebase.database().ref().update(childUdates); 

Cela garantirait que les deux nœuds enfants sont mis à jour simultanément.

+0

Merci pour votre réponse. La mise à jour de plusieurs nœuds enfants à la fois serait ma prochaine question;) Mon principal problème est de savoir quels nœuds mettre à jour. Quand est-ce que je mets à jour mon studbook ou le propriétaire quel étalon dois-je mettre à jour? J'ai édité ma question et ajouté la structure de DB. –

+0

Pas de problème! Eh bien, pour cela, il vous suffira de garder trace de l'identifiant de l'étalon que vous souhaitez mettre à jour. Comment définissez-vous votre objet Stallion? – Alex