Je suis en train de créer une application de gestion pour aider à gérer ma société de détaillants d'automobiles mobiles (et, espérons-le, d'autres). J'ai du mal à comprendre comment modéliser certaines données.Rendez-vous et postes individuels
Cette question est liée à une question précédente que j'ai posté, mais je l'ai reproduit les informations pertinentes ci-dessous: Database design - google app engine
Dans cette application, il y a des notions de « rendez-vous » et « les éléments de ligne. "
Les rendez-vous sont un lieu et un moment où les employés doivent être en mesure de fournir un service.
Les éléments de campagne constituent un service, des frais ou des remises et leurs informations associées. Un exemple des postes qui pourraient aller dans un rendez-vous:
Name: Price: Commission: Time estimate Full Detail, Regular Size: 160 75 3.5 hours $10 Off Full Detail Coupon: -10 0 0 hours Premium Detail: 220 110 4.5 hours Derived totals(not a line item): $370 $185 8.0 hours
Dans ma précédente mise en œuvre de cette application, les éléments de ligne ont été endigués par un seul rendez-vous. Cela a fonctionné très bien la plupart du temps, mais a causé des problèmes parfois. Un exemple serait si un rendez-vous a été interrompu à mi-chemin à cause de la pluie et le technicien a dû revenir le lendemain et finir. Cette situation nécessitait deux rendez-vous pour le même élément de campagne. Dans des cas comme celui-ci, je voudrais juste faufiler les données un peu en définissant le "élément de ligne" sur le deuxième rendez-vous pour lire quelque chose comme "Terminer Up", puis le coût serait de 0 $.
Dans cette nouvelle version, j'envisage permettant les éléments de ligne d'être jumelés à plus d'un rendez-vous avec une structure de table qui ressemble à ceci:
Appointment
start_time
etc...
Line_Item
appointment_Key_List
name
price
etc...
Un problème général avec cette structure est qu'elle est compliquée et je ne suis même pas sûr s'il est approprié de faire correspondre un élément de campagne avec plusieurs rendez-vous. Si les éléments de campagne ne peuvent faire partie que d'un seul rendez-vous, alors je peux simplement mettre une liste d'éléments de ligne dans chaque rendez-vous, quand j'obtiens des rendez-vous, je recevrais déjà des éléments de campagne. Un problème plus spécifique est que j'utilise google app engine et si je veux interroger un ensemble de rendez-vous et leurs éléments de campagne associés, je dois d'abord interroger l'ensemble des rendez-vous, puis faire une seconde interroger les éléments de campagne à l'aide de l'opérateur IN pour tester si l'une des clés de rendez-vous Line_Item correspond à l'ensemble des clés de rendez-vous renvoyées par la requête précédente. La deuxième requête échouera si j'ai plus de 30 clés qui me demandent de partitionner la requête. Je pourrais dénormaliser les données pour éviter cette requête de lecture compliquée et étendue, et je devrai probablement dénormaliser dans une certaine mesure de toute façon, mais je préfère éviter la complexité le cas échéant.
Ma question est de savoir comment ce type de situation est-il habituellement modélisé? Est-il même approprié d'associer un élément de campagne à plusieurs rendez-vous, ou est-il normal de simplement diviser les éléments de ligne en plusieurs éléments distincts pour chaque rendez-vous, par exemple «1ère moitié d'un emploi de 2 jours»? " Comment les applications similaires réussies le font-elles? Quelles sont les règles de base dans ce type de situation? Quelles mises en œuvre se sont révélées moins problématiques?
Merci!
Une réponse très informative! Merci de partager cette information avec SO. @DutrowLLC marquez s'il vous plaît cette réponse comme la bonne, car elle est, à mon avis, une meilleure réponse à votre question. @Nick Johnson Mes excuses pour croire les mauvaises choses. Merci d'expliquer et de fournir cette très belle réponse avec de super informations pour tout le monde! – Pindatjuh
@Pindatjuh - C'est beaucoup à prendre en compte. Cette vidéo va également dans quelques détails sur la façon dont les listes sont indexées et la recherche. J'ai trouvé la seconde moitié sur fusion-join extrêmement utile. C'était un pdf avec des diapositives que vous pouvez regarder en regardant la vidéo: http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html –
Merci d'avoir pris le temps de répondre à cette question si complètement J'espère que d'autres personnes pourront également trouver votre réponse et en tirer profit. –