如何在数据库级设计定价模块

时间:2012-01-24 06:49:59

标签: database database-design data-modeling entity-relationship

我想在数据库中建模以下场景:

我有一个包,包含独立的ActivitiesHotel

包P:

  • 活动 A1,A2,A3
  • 酒店 H

ActivitiesHotel是独立实体,在实体的定义时定义了自己的价格。

当实体添加到套餐时,价格可以更改(仅specific to the package)。因此,每个套餐都会为活动/酒店提供独特的价格。

E.g。 (Defining activities and hotel)

A1 - 10$
A2 - 20$

H1 - 100$

(Adding activities and hotel to package)

Package p;
p.addActivity("A1", 15);
p.addActivity("A2", 25);
p.addHotel("H1", 50);

yields => 

p
 - A1 - 15
 - A2 - 25
 - H1 - 50

数据库方:

定义

  • Activity

    Activity-id,StartDate,EndDate,Price

  • Hotel

    Hotel-id,StartDate,EndDate,Price

添加到包

  • Package table

Package-id,Hotel-id,Activity-id

  • Package-Activity price table

    Package-id,Activity-id,Price // package-id和activity-id作为唯一键

  • Package-Hotel price table

    Package-id,Hotel-id,Price // package-id和hotel-id作为唯一键

我需要一些关于我想出的设计的反馈。 我复杂了吗?有没有更简单/更好的方法来做到这一点? 此外,正如我写这篇文章,我认为一个包可以有很多酒店和活动,所以需要在这里考虑因素。 我是否因为对于实体的每次价格查询我将要执行连接而对此进行过多分割?

修改

通过加入When and why are database joins expensive?

找到有关效果的相关链接

1 个答案:

答案 0 :(得分:2)

这里你确实需要五张桌子。

您有三个实体:活动,酒店和套餐(假设每个套餐都有一些与酒店或活动无关的数据)。你有两个关系,包括多对多关系,即package-hotel和package-activity。每个关系行都以特定价格注释。

要走五张桌子。不,必须进行连接不是问题:它比拥有非正常数据更好。您可以稍后对进行非规范化处理