2017-10-21 111 views
0

Je voudrais mapper la hiérarchie d'objets dans swift vers firebase et j'essaie de trouver le meilleur motif pour cela.Hiérarchie d'objet de mappage dans swift to firebase

J'ai une classe parente Parent avec une propriété propParent et ses deux enfants: Child1 avec une propriété propChild1 et Child2 avec une propriété propChild2.

Quelle est la manière la plus efficace et la plus facile à mettre en correspondance avec un schéma de base de données Firebase?

class Parent { 
    var propParent: String 
} 
class Child1: Parent { 
    var propChild1: String 
} 
class Child2: Parent { 
    var propChild2: String 
} 
+0

La terminologie utilisée dans la question est un peu ambigu et ne s'applique pas de Swift à Firebase. Dans l'exemple, il y a une classe de Parent et une * SubClass * Child1 et Child2. La classe parent n'a * pas * deux enfants. Il s'agit d'une relation de classe à sous-classe dans laquelle la sous-classe hérite des attributs parents (ce qui fait partie de la puissance de la sous-classe). Dans Firebase, ce n'est pas le cas; il n'y a pas de classes et de sous-classes, seulement des nœuds Parent et Child et la seule relation est le chemin ../parent_node/child1 et/parent_node/child2; il n'y a pas d'héritage d'attributs (parce qu'il n'y en a pas). – Jay

Répondre

0

Dans les bases de données NoSQL, il n'y a presque jamais un seul modèle le plus efficace pour tous les cas d'utilisation. En effet, dans NoSQL, vous devrez souvent modifier et développer votre modèle de données pour chaque cas d'utilisation que vous souhaitez implémenter dans votre application. Pour une bonne introduction au sujet, je recommande de lire NoSQL data modeling et de regarder Firebase for SQL developers.

Cela dit, à sa plus simple que vous avez bidirectionnelle plusieurs à plusieurs, ce qui pourrait être modélisé comme:

users 
    parent: {...} 
    child1: {...} 
    child2: {...} 
parents: /* contains the parent for each user */ 
    child1: "parent", 
    child2: "parent" 
children: /* contains the children for each user */ 
    parent: 
    child1: true, 
    child2: true 

Le fait qu'un utilisateur ne peut avoir qu'un seul parent est modélisé ici par ayant une seule valeur pour chaque nœud sous parents. Les multiples enfants possibles par utilisateur sont modélisés comme une collection pour chaque nœud sous children. Cette collection est modélisée comme un index: une collection de paires String: true, où la valeur (true) est un marqueur sans signification.

utilise ce concept de de quelques autres réponses, donc je vais vous y lien pour plus d'informations:

+0

Merci pour la réponse. Je ne suis pas sûr de ce que vous entendez par "utilisateurs" ici. Aussi, comment stockez-vous les propriétés héritées? Chez les enfants ou les parents? C'est le problème principal ici. Ceci est déroutant, surtout si vous avez une propriété id dans le parent qui est héritée par les enfants. –

+0

Désolé d'avoir mal compris votre problème. Pouvez-vous peut-être modifier votre question pour inclure le code qui lit/écrit les données, le JSON que vous envisagez et le problème que vous voyez? –

+0

Pour clarifier plus, je suis à la recherche d'un modèle pour la modélisation de l'héritage dans Firebase qui sert le même objectif de ce modèle pour DB relationnel https://www.martinfowler.com/eaaCatalog/singleTableInheritance.html –