- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设一个简单的酒店预订数据库包含三个表。
表 1:预订此表包含入住和退房日期以及一间或多间客房的引用信息和优惠券(如果适用)。
表 2:房间此表包含所有酒店房间的数据,包括每晚价格和床位数量。
表 3:优惠券该表包含所有优惠券的数据。
选项#1:如果您想了解特定月份的预订概览以及每次预订的总费用,您必须获取预订、每次预订的房间和优惠券(如果有)。
有了这些数据,您就可以计算出预订的总金额。
选项#2:然而,还有另一种选择,就是将总费用和折扣存储在预订表中,以便更容易地获取这些计算。缺点是您的数据变得更加依赖并且使用起来更不灵活。我的意思是,每次更改房间或链接到预订的优惠券时,您都必须手动更新预订表的总费用和折扣。
在性能(选项 #2)版本数据独立性(选项 #1)方面通常推荐什么。
更新:它是一个 MySQL 数据库,此时有超过 500 000 行(保留),但正在快速增长。我想在早期阶段优化数据库性能,以确保用户体验保持快速和响应迅速。
最佳答案
让我开始用一个故事来回答这个问题。 (有点简化。)
2011-01-01 我在 2011-03-01 和 2011-03-02 预订了两晚的房间。你不告诉我我会得到哪个房间。 (因为你还不知道我会得到哪个房间。)你告诉我每晚 40 美元。我没有优惠券。您将我的预订输入您的计算机,即使您已经完全预订了这两晚。事实上,您已经有一个人在这两晚的等候名单上。 (超额预订是正常的事情,不是不正常的事情。)
2011-01-15 您将每个房间的价格提高了 5 美元。
2011-02-01 我再次打电话确认您还有我的预订。您确认我预订了 2011 年 3 月 1 日和 2011 年 3 月 2 日两晚,价格为 40 美元。 (不是 45 美元,你现在的价格。那不是我们的交易。我们的交易是每晚 40 美元。)
2011-02-12 一个人打电话取消了 2011-03-01 和 2011-03-02 的预订。您还没有确定可以入住的房间。等候名单上的另一个人现在有房间了;我还在等候名单上。
2011-02-15 一个人打电话取消了 2011-03-01 和 2011-03-02 的预订。现在我有一个房间。
2011-03-01 我用优惠券入住。
If you want to get an overview of the reservations for a particular month with the total cost of each reservation, you'd have to fetch the reservations, the rooms for each reservation, and the coupon (if one is present).
我不这么认为。您同意的价格应该在预订本身。直到最后一刻才能合理分配特定房间。如果每个预订有一张优惠券,则可能也需要与预订一起存储。
唯一的报告问题是确保您的报告清楚地报告由于超额预订应忽略多少预期收入。
关于mysql - 解耦 MySQL 数据与易用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008495/
当编写一个库或模块的公共(public) API 时,将在各种用例中被许多其他代码使用,平衡灵 active 和易用性的最佳方法是什么?我相信这两者经常发生冲突,你做的东西越灵活,就越难让它做好任何一
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
我正在为基于 Java 的移动网络应用程序编写后端,我想知道就可伸缩性和易用性而言,使用 WebSockets 与像 comet 这样的长轮询解决方案有什么优缺点。另一种选择也是使用 TCP 实现我自
我知道 Redis 很强大,我用它来缓存我的 Rails 应用程序。谁能给我一个 rails 默认缓存和 redis 之间的比较?作为缓存有何权衡。 最佳答案 重点是分发。 使用 Redis,缓存可以
我是一名优秀的程序员,十分优秀!