需要帮助为食物银行设计ERD

时间:2012-12-24 02:58:48

标签: mysql sql erd

这是我在校外的第一个项目,所以我生锈了,缺乏练习。

我想创建一个数据库,但我不确定到目前为止我是否正常。我需要一些报告表的帮助。

情况:

  • 食物银行有多个分发食物的机构
  • 每个代理机构都必须提交一份报告,其中列出了一长串邮政编码中包含的家庭/人数。
  • 我想把一个fk放在Report to Zips表中。但那会不会选择多个拉链?

也许我离开了基地。有人对我有建议吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

通常像“食物”这样的孤儿表是一个缺少的标志。如果涉及的数据太多,你会认为它会以某种身份与订单模型联系起来,或者至少你会对哪种代理商存储哪种食品有一些指示。

奇怪的是,缺少的是如何根据此模式计算“家庭服务”等数据。似乎没有这方面的信息来源,甚至没有“家庭服务”记录,也不是每日或每周摘要的地点,并且总计。

“Zips”表仅在存在可能通过邮政编码链接的其他数据时才相关。如果您有纬度/经度数据库或人口统计数据,这将是有意义的。但是,拥有一个实际的外键有点沉重。如果你不知道拉链怎么办?如果由于某种原因拉链在美国以外的地方怎么办?你将如何处理五位和九位邮政编码?

由于拉链不是由用户创建的,因此拉链表主要是可能引用也可能不引用的辅助信息。这是一个孤立的“参考”表的好选择。

请记住,这样的图表结构很大程度上受应用程序前端的影响。如果用户正在添加食品订单,则会转化为所有三件事之间的关系。如果代理商根据日常活动日志生成报告,那么您需要再次确定这三个实体之间的关系。

前端通常基于用例,因此请确保您能够容纳所有相关的内容。

答案 1 :(得分:1)

此表的更好名称可能是FoodService或其他东西。我想你最终想要的那种报告不仅仅是这个表中的一行,所以命名它报告有点令人困惑。

在任何情况下,每个报告都是{代理商ID,邮政编码,日期}的唯一组合,当然代理商ID是外键。正如您所指出的,此表中的其他列将是服务的家庭和人数。这意味着您将为每个代理商 - 邮政日期组合设置行,如下所示:

Agency   | ZIP   | Date   | FamiliesServed | PeopleServed
Agency A | 12345 | Jan-12 | 100            | 245
Agency A | 12340 | Jan-12 | 20             | 31
Agency B | 12345 | Jan-12 | 80             | 178
Agency B | 12340 | Jan-12 | 0              | 0

这些总数是否也被“程序”细分了?如果是这样,程序需要成为此表的主键的一部分。否则,程序不属于此处。

最后,除非您要开始存储关于邮政编码本身的数据,否则您不需要邮政编码表。

相关问题