如何加入 table DurationDetails 和 Table 每个程序的成本

How to join between table DurationDetails and Table cost per program

如何为旅游公司设计数据库以根据日期计算每个项目旅游的机票和酒店费用?

我做的是

Table - 程序

+-----------+-------------+
| ProgramID | ProgramName |
+-----------+-------------+
|         1 | Alexia      |
|         2 | Amon        |
|         3 | Sfinx       |
+-----------+-------------+

每个项目的持续时间可能只有 8 天或 15 天

它有两个时期,只有 8 天或 15 天。

所以我做持续时间程序 table 与程序有一对多。

Table - 节目持续时间

+------------+-----------+---------------+
| DurationNo | programID |   Duration    |
+------------+-----------+---------------+
|          1 |         1 | 8 for Alexia  |
|          2 |         1 | 15 for Alexia  |
+------------+-----------+---------------+

对 amon 程序和 sfinx 程序 8 和 15 进行同样的编程。

每个程序 8 或 15 每天都有固定的详细信息如下:

Table 持续时间详情

+------+--------+--------------------+-------------------+
| Days | Hotel  |       Flight       |    transfers      |
+------+--------+--------------------+-------------------+
| Day1 | Hilton | amsterdam to luxor | airport to hotel  |
| Day2 | Hilton |                    | AbuSimple musuem  |
| Day3 | Hilton |                    |                   |
| Day4 | Hilton |                    |                   |
| Day5 | Hilton | Luxor to amsterdam |                   |
+------+--------+--------------------+-------------------+

每个程序都确定按航班日期开始,以便

如果程序 alexia 8 天的航班日期是 25/06/2017 它将如下

+------------+-------+--------+----------+
|    Date    | Hotel | Flight | Transfer |
+------------+-------+--------+----------+
| 25/06/2017 |    25 |    500 |       20 |
| 26/06/2017 |    25 |        |       55 |
| 27/06/2017 |    25 |        |          |
| 28/06/2017 |    25 |        |          |
| 29/06/2017 |    25 |    500 |          |
+------------+-------+--------+----------+

这实际上是我需要的,如何建立关系以加入计划成本。

机票和酒店费用如上所述?

5 天费用为 1200

25 是希尔顿酒店每天的费用

500 是航班费用

20 和 55 是每次传输的成本

图片展示我所需要的

relation between duration and cost

说实话,我并不完全理解你想要完成的事情。您的描述不清楚,您的 table 似乎缺少信息/包含不应该出现在您的 table 中的信息,而且我理解您的描述的方式并没有真正意义基于您分享的 UI 屏幕截图。

您似乎正在为一家旅行社开发一个应用程序,该应用程序将允许代理商创建旅行行程。他们可以为这次旅行命名(因此,如果某个特定套餐很受客户欢迎,他们可以只提供 "Alexa" 套餐),实用程序将计算这次旅行的总预估费用。如果我没理解错的话,这次旅行要么是 8 天,要么是 15 天。

就我个人而言,我会完全删除 "ProgramDuration" table。如果在索引 1 处有两个版本的 Alexa 旅行,那么您将 运行 处理各种问题。我可以详细说明为什么这是一个坏主意,但除非您真的对这个 ProgramDuration table 挂断了,否则不值得花时间。您应该向 "program" table 添加一个 "duration" 字段,并为 "Alexa" 程序的每个不同持续时间版本分配一个新的 ProgramID。

您的 table "Duration details" 也没有达到目标。您在此 table 中的字段将使您更难向您的应用程序添加新功能。您应该有一个字段 "ProgramID,",稍后我们将使用它来将此 table 加入到程序 table 中。您应该有一个 "Day" 字段,它清楚地指示了行程中的日期。您应该只有一个字段 "ItemID." 我们将使用 "ItemID" 字段将您的行程加入我们将要创建的新项目 table。

您的项目 table 是您定义可能出现在行程中的所有项目的地方。您当前的行程 table 有三种可能 "types" 的费用、航班、酒店和转机。如果您的旅行社想要开始将膳食支出添加到他们的行程/预算中怎么办?那些花钱的活动呢?货币兑换费呢?您的客户在旅行前需要的物品(壁式适配器、行李箱等)如何?在您的项目 table 中,您将拥有 ItemID、ItemName、ItemUnitPrice 和 ItemType 字段。一个可能的项目如下:

物品 ID:1,物品名称:希尔顿之夜,物品单价:300,物品类型:住宿

将 "SELECT [Column] AS [Alias]" 语法与某些 CTE 或子查询和 JOIN 运算符结合使用,我们可以轻松地重构一个看起来像您的 "Program Duration Details" table 的 table,但我们以后可以更灵活地添加或删除内容。

出于安全性和可编程性的考虑,我还要添加一个名为 "ItemTypeTable" 的 table,带有单个字段 "TypeName." 您可以使用此 table 来防止未经授权用户定义新的项目类型,您可以使用此 table 创建下拉菜单、导航和其他有用功能的所有方式。可能会有更简洁的实现,但这不应该代表严重的性能或大小损失。

总而言之,冒着可能有些粗鲁的风险,您似乎正试图承担一项相当庞大、复杂的任务,并且对基本的关系数据库设计和实现有非常初步的了解。如果您是在专业背景下这样做,我强烈建议您考虑咨询另一位可能在该领域更有经验的专业人士。