假设一个简单的数据库用于酒店预订,有三个表。
表1:预订 此表包含登记入住和退房日期以及一个或多个房间的参考和优惠券(如果适用)。
表2:会议室 此表格保存了所有酒店客房数据,包括每晚的价格和床位数。
表3:优惠券 此表包含所有优惠券的数据。
选项#1: 如果您想获得每个预订总费用的特定月份预订概览,您需要获取预订,每个预订的房间和优惠券(如果有的话)。
使用此数据,您可以计算预订的总金额。
选项#2: 但是,还有另一种选择,即在预订表中存储总成本和折扣,以便更容易获取这些计算。缺点是您的数据变得更加依赖,而且使用起来也不那么灵活。我的意思是,每次更改与预订相关联的房间或优惠券时,您都必须手动更新预订表的总费用和折扣。
通常建议的性能(选项#2)版本数据独立性(选项#1)。
更新: 它是一个MySQL数据库,此时有超过500 000行(保留),但正在快速增长。我希望在早期阶段优化数据库性能,以确保UX保持快速响应。
答案 0 :(得分:3)
让我开始用一个故事回答这个问题。 (有点简化。)
2011-01-01我预订了两晚的房间,2011-03-01和2011-03-02。你不告诉我我会得到哪个房间。 (因为你还不知道我会得到哪个房间。)你告诉我每晚要花40美元。我没有优惠券。您将预订输入计算机,即使您已经完全保留了这两个晚上。事实上,在这两个晚上你已经有一个人在等候名单上。 (超额预订是正常的事情,而不是异常的事情。)
2011-01-15您将每个房间的房价提高5美元。
2011-02-01我再次致电以确保您仍然有我的预订。您确认我预订了两晚,2011-03-01和2011-03-02,价格为40美元。 (不是45美元,你当前的费率。这不是我们的交易。我们的交易是每晚40美元。)
2011-02-12一个人致电并取消他们对2011-03-01和2011-03-02的预订。你还没有确定的房间,我肯定能够办理登机手续。等候名单上的另一个人现在有一个房间;我还在等候名单上。
2011-02-15一个人致电并取消他们对2011-03-01和2011-03-02的预订。现在我有一个房间。
2011-03-01我办理了优惠券。
如果您想了解特定预订的概述 每个预订的总费用的月份,你必须取得 预订,每次预订的房间和优惠券(如果有的话) 在场)。
我不这么认为。您同意的价格应该在预订中。特定房间在最后一分钟之前无法合理分配。如果每次预订只有一张优惠券,那么也可能需要与预订一起存储。
唯一的报告问题是确保您的报告清楚地报告由于超量预订应该忽略多少预期收入。
答案 1 :(得分:1)
您的回答的响应取决于数据库的大小。对于小型数据库选项#1更好,但对于庞大的数据库选项#2更好。因此,如果您可以说明您在表中获得了多少行,并且使用了数据库(oracle,sqlserver等),您将获得更精确的答案。