gpt4 book ai didi

mysql - 解耦 MySQL 数据与易用性

转载 作者:搜寻专家 更新时间:2023-10-30 20:12:04 26 4
gpt4 key购买 nike

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

表 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com