Я создаю приложение для управления, чтобы помочь управлять моей мобильной компанией по детализации (и, надеюсь, другие). Я изо всех сил пытаюсь понять, как моделировать некоторые данные.Назначения и статьи позиций
Этот вопрос связан с предыдущим вопросом, что я в курсе, но я воспроизведен соответствующей информацию ниже: Database design - google app engine
В этом приложении есть понятия «назначения» и «Line Items. "
Назначения - это место и время, когда сотрудники должны будут предоставлять услуги.
Объекты - это сервис, плата или сопутствующая информация. Пример позиций, которые могли бы пойти на прием:
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
В моей предыдущей реализации этого приложения, Line Items содержатся одним назначением. Это работало отлично в большинстве случаев, но иногда вызывало проблемы. Примером может служить случай, когда назначение прерывается на полпути из-за дождя, и технический специалист должен был вернуться на следующий день и закончить. Для этой ситуации требуется две встречи для одной и той же позиции. В таких случаях я просто немного подтолкнул данные, установив «позицию» на второй встрече, чтобы прочитать что-то вроде «Finish Up», а затем стоимость будет равна $ 0.
В следующей версии я рассматриваю включение отдельных позиций, чтобы совпасть с более чем одного назначением со структурой таблицы, которая выглядит следующим образом:
Appointment
start_time
etc...
Line_Item
appointment_Key_List
name
price
etc...
Общая проблема с этой структурой состоит в том, что сложно и я даже не уверен, соответствует ли она одной позиции с несколькими встречами. Если Линейные позиции могут быть только частью одного Назначения, тогда я могу на самом деле просто разместить список позиций в каждом Назначении, когда я получаю «Назначения», я уже получаю Линейные позиции.
Более конкретная проблема заключается в том, что я использую механизм Google для работы с Google, и если я хочу запросить набор встреч и связанных с ними позиций, мне придется сначала запросить набор встреч, а затем сделать второй запрос для позиций с использованием оператора IN для проверки того, попадает ли какой-либо из ключей назначения Line_Item в набор ключей назначения, которые были возвращены из предыдущего запроса. Второй запрос не удастся, если у меня есть более 30 ключей, требующих, чтобы я очертил запрос. Я мог бы денормализовать данные, чтобы избежать этого сложного и расширенного запроса на чтение, и мне, вероятно, придется в какой-то степени денормализовать, но я предпочел бы избежать сложности, когда это необходимо.
Мой вопрос: как этот тип ситуации обычно моделируется? Является ли даже целесообразным, чтобы позиция позиции была сопряжена с несколькими встречами, или это нормально, чтобы просто разделить позиции на отдельные для каждой встречи, такие как «1-я половина двухдневного задания» и «2-я половина двухдневного задания» «. Как делают подобные успешные приложения? Каковы эмпирические правила этого типа ситуации? Какие реализации оказались менее проблематичными?
Спасибо!
Очень информативный ответ! Спасибо, что разделили эту информацию с SO. @DutrowLLC, пожалуйста, отметьте этот ответ как правильный, как есть, на мой взгляд, гораздо лучший ответ на ваш вопрос. @Nick Johnson Приносим извинения за то, что вы верите в неправильные вещи. Спасибо за объяснение и предоставление этого очень приятного ответа с отличной информацией для всех! – Pindatjuh
@Pindatjuh - Его много, чтобы заглянуть. В этом видео также подробно рассказывается о том, как индексируются и просматриваются списки. Я нашел вторую половину при объединении-join чрезвычайно полезной. Это был pdf-файл с слайдами, на который вы можете смотреть во время просмотра видео: http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html –
Спасибо, что нашли время, чтобы ответить на этот вопрос так тщательно , Я надеюсь, что другие люди также смогут найти ваш ответ и воспользоваться им. –