数据库
首页 > 数据库> > 解耦MySQL数据与易用性

解耦MySQL数据与易用性

作者:互联网

假设有一个包含三个表的简单的酒店预订数据库.

表1:预订
该表包含入住和退房日期以及对一个或多个房间的引用以及一张优惠券(如果适用).

表2:房间
该表包含所有酒店客房的数据以及每晚价格和床位数.

表3:优惠券
该表包含所有优惠券的数据.

选项1:
如果要查看特定月份的预订概况以及每个预订的总费用,则必须获取预订,每个预订的房间和优惠券(如果有).

有了这些数据,您就可以计算出预订总额.

选项2:
但是,还有另一种选择,即将总成本和折扣存储在预订表中,以便更轻松地获取这些计算.不利的一面是您的数据变得更加依赖并且使用起来的灵活性也大大降低.我的意思是,每次更改与预订相关的房间或优惠券时,您都必须手动更新预订表的总费用和折扣.

关于性能(选项2)版本数据独立性(选项1),通常建议使用什么.

更新:
这是一个MySQL数据库,目前有50万行以上(保留),但增长迅速.我想尽早优化数据库性能,以确保UX保持快速和响应.

解决方法:

让我开始用一个故事来回答这个问题. (略有简化.)

2011-01-01我为2011-03-01和2011-03-02预订了两个晚上的房间.你不告诉我我要去哪个房间. (因为您还不知道我要去哪个房间.)您告诉我这将花费每晚40美元.我没有优惠券.您已经将我的预订输入到计算机中,即使您已经完全保留了这两个晚上.实际上,这两个晚上您已经有一个人在等待名单上. (超额预订是正常现象,不是异常现象.)

2011年1月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我用优惠券办理入住手续.

>您可以将每个房间或每个级别的“当前”或“默认”价格存储
房间,但您需要存储我们与我同意的价格
保留.
>预订不预订房间;他们保留潜在的房间.您
不知道谁会早点离开,谁会晚点离开,谁会
取消,依此类推. (根据我的经验,偶尔会有一个房间
用犯罪现场胶带密封.您也不知道还能持续多久.)
>您可以预订更多的住宿,而不是过夜.
>优惠券可能会在退房前的任何时间出现.

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,database-design,database,relational-database
来源: https://codeday.me/bug/20191011/1895153.html