这是我在校外的第一个项目,所以我生疏且缺乏实践。
我想创建一个数据库,但我不确定到目前为止我是否做得很好。我需要一些关于报告表的帮助。
情况:
- 食物银行有多个分发食物的机构
- 每个机构都必须提交一份报告,其中包含从一长串邮政编码中服务的家庭/人数。
- 我想在 Report to Zips 表上放一个 fk。但这会让选择多个拉链成为不可能吗?
也许我离基地很远。有人对我有什么建议吗?
通常拥有像“Food”这样的孤儿表是缺少某些东西的标志。如果涉及到这么多数据,你会认为它会以某种方式与订单模型相关联,或者至少你会有某种迹象表明哪个机构储存了哪种食物。
奇怪的是,像“家庭服务”这样的数据是如何从这个模式中计算出来的。似乎没有此信息的来源,甚至没有“家庭服务”记录,也没有用于放入和汇总的每日或每周摘要的位置。
仅当存在可能通过邮政编码链接的其他数据时,“邮编”表才相关。如果您有经纬度数据库或人口统计数据,这将是有意义的。不过,拥有一个实际的外键有点笨拙。如果你不知道拉链怎么办?如果出于某种原因,邮编在美国境外怎么办?您将如何处理五位和九位邮政编码?
由于 zip 不是由用户创建的,因此 zips 表主要是可能会或可能不会被引用的辅助信息。这是一个孤立的“参考”表的良好候选者。
请记住,这样的图表结构很大程度上受应用程序前端的影响。如果用户正在添加食品订单,这将转化为所有三件事之间的关系。如果机构根据日常活动日志生成报告,那么您再次需要这三个实体之间的关系。
前端通常基于用例,因此请确保您包含所有相关的内容。
此表的更好名称可能是 FoodService 或其他名称。我想你真正想要的报告类型不只是该表中的一行,因此将其命名为 Report 有点混乱。
在任何情况下,每个报告都是 {Agency ID, ZIP code, Date} 的唯一组合,当然,Agency ID 是一个外键。如您所指出的,此表中的其他列将是服务的家庭和人数。这意味着您将拥有每个机构-ZIP-日期组合的行,如下所示:
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
这些总数是否也按“程序”细分?如果是这样,程序需要成为该表的主键的一部分。否则,程序不属于这里。
最后,除非您要开始存储有关邮政编码本身的数据,否则您不需要邮政编码表。