我正在构建一个管理应用程序来帮助管理我的移动汽车美容公司(希望还有其他公司)。我正在努力弄清楚如何对一些数据进行建模。
这个问题与我之前发布的一个问题有关,但我已经复制了以下相关信息: Database design - google app engine
在这个应用程序中,有“约会”和“行项目”的概念。
约会是员工为了提供服务而被期望在的地点和时间。
行项目是服务、费用或折扣及其相关信息。可能进入约会的行项目示例:
名称:价格:佣金:时间估算 完整细节,常规尺寸:160 75 3.5 小时 10 美元的全细节优惠券:-10 0 0 小时 高级细节:220 110 4.5 小时 派生总计(非行项目):370 美元 185 美元 8.0 小时
在我之前的这个应用程序的实现中,行项目包含在一个约会中。这在大多数情况下工作得很好,但有时会引起问题。一个例子是,如果约会中途因为下雨而中断,技术人员必须第二天回来完成。这种情况需要对同一行项目进行两次预约。在这种情况下,我只需将第二次约会的“行项目”设置为“完成”之类的内容,从而稍微捏造数据,然后成本将为 0 美元。
在下一个版本中,我正在考虑启用 Line Items 以匹配多个约会,其表结构如下所示:
Appointment
start_time
etc...
Line_Item
appointment_Key_List
name
price
etc...
这种结构的一个普遍问题是它很复杂,我什至不确定它是否适合将一个行项目与多个约会相匹配。如果行项目只能是一个约会的一部分,那么我实际上可以在每个约会中放置一个行项目列表,当我得到约会时,我已经得到了行项目。
一个更具体的问题是我正在使用谷歌应用程序引擎,如果我想查询一组约会及其相关的行项目,我必须先查询一组约会,然后再查询该行items 使用 IN 运算符测试是否有任何 Line_Item 的约会键落入从先前查询返回的约会键集中。如果我有超过 30 个键需要我对查询进行分片,则第二个查询将失败。我可以对数据进行非规范化以避免这种复杂而广泛的读取查询,并且无论如何我可能不得不在某种程度上进行非规范化,但我宁愿在适当的情况下避免复杂性。
我的问题是这种情况通常是如何建模的?一个行项目与多个约会配对是否合适,或者为每个约会简单地将行项目拆分为单独的项目是否正常,例如“两天工作的第一半”和“两天工作的第二半。” 类似的成功应用程序是如何做到这一点的?在这种情况下,经验法则是什么?哪些实现被证明问题较少?
谢谢!