我想在数据库中建模以下场景:
我有一个包,包含独立的Activities
和Hotel
:
包P:
Activities
和Hotel
是独立实体,在实体的定义时定义了自己的价格。
当实体添加到套餐时,价格可以更改(仅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作为唯一键
我需要一些关于我想出的设计的反馈。 我复杂了吗?有没有更简单/更好的方法来做到这一点? 此外,正如我写这篇文章,我认为一个包可以有很多酒店和活动,所以需要在这里考虑因素。 我是否因为对于实体的每次价格查询我将要执行连接而对此进行过多分割?
修改
找到有关效果的相关链接答案 0 :(得分:2)
这里你确实需要五张桌子。
您有三个实体:活动,酒店和套餐(假设每个套餐都有一些与酒店或活动无关的数据)。你有两个关系,包括多对多关系,即package-hotel和package-activity。每个关系行都以特定价格注释。
要走五张桌子。不,必须进行连接不是问题:它比拥有非正常数据更好。您可以稍后对的进行非规范化处理。