0

J'essaie d'enrouler ma tête 'autour gae datastore, mais je ne comprends pas entièrement le documentation for the Key Class/ou peut-être c'est les relations d'ancêtre en général je ne saisis pas. Je pense ce que je veux est de multiples ancêtres. Par exemple: Dire que je voulais modéliser la course annuelle parrainée par notre école pour la charité; les écoliers courent autour de la piste et leurs parents (= sponsors) font un don à la charité pour chaque tour terminé.Pouvez-vous m'aider à comprendre le nbd Key Class Documentation ou plutôt la relation ancêtre?

Dans mon esprit, je créerais les types suivants:

  1. Profil (peut être à la fois coureur et sponsor)
  2. Run (définit qui (profil voir) court pour ce que la charité, tours effectivement terminé)
  3. parrainage (qui définit (profil voir) fait un don combien pour ce terme, si le don a été fait)

J'ai appris que datastore est une NoSQL, base de données non relationnelle, mais havre de paix Je ne l'ai pas entièrement compris. Donc mes questions sont:

a. Est-ce que la création d'une entité pour "Sponsoring" est la meilleure façon de faire du datastore? Je pourrais aussi le modéliser comme une relation has-a (chaque course a des sponsors) - mais puisque je veux aussi suivre le montant sponsorisé, que le sponsor paye et peut-être plus cela semble inapproprié

b. Je voudrais facilement interroger tous les commandites faites par une seule personne et aussi toutes les commandites appartenant à une certaine course. Alors, je me sens, ce serait approprié:

Profile --is ancestor of--> Run 
Profile --is ancestor of--> Sponsorship 
Run --is ancestor of--> Sponsorship 

Est-ce raisonnable? Je peux voir un constructor pour une clé qui prend plusieurs sortes dans l'ordre des ancêtres en tant qu'arguments. Était-ce conçu pour cette affaire? "Exécuter" et "profil" seraient au même "niveau" (c'est-à-dire maman & ancêtres de papa pas père & grand-père) - à quoi ressemblerait ce constructeur en python?

Répondre

2

La principale façon d'établir des relations entre entités est via les propriétés de clé dans le modèle d'entité. Normalement, aucune ascendance n'est nécessaire.

Par exemple:

class Profile(ndb.Model): 
    name = ndb.StringProperty() 

class Run(ndb.Model): 
    runner = ndb.KeyProperty(kind='Profile') 
    rounds = ndb.IntegerProperty() 
    sponsorship = ndb.KeyProperty(kind='Sponsorship') 

class Sponsorship(ndb.Model): 
    run = ndb.KeyProperty(kind='Run') 
    donor = ndb.KeyProperty(kind='Profile') 
    done = ndb.BooleanProperty() 

L'ascendance place juste entités à l'intérieur du même groupe d'entités tout en appliquant supplémentaires relations au-dessus de celles déjà établies par le modèle (qui peut être tout à fait limite!). Voir Transactions and entity groups et peut-être Contention problems in Google App Engine.