重组/分区数据库表

时间:2011-08-05 18:29:56

标签: mysql sql database database-design

我有一个具有以下结构的表,列是原点,目的地,旅行时间和出发时间。主键是原点,目的地和出发时间的组合。有没有办法重新构建这个,以便行中的原点和目的地没有太多重复?

3 个答案:

答案 0 :(得分:1)

“太多原产地和目的地重复”的存在并不重要。它只是您唯一密钥的一部分,而且是必要的。如果你真的想,你可以创建一个单独的表:

OriginDestinationKey
Origin
Destination

然后在原始表中你的PK将是

OriginDestinationKey
DepartureTime

但是,你仍然只会有一堆重复的OriginDestinationKeys。我不担心它,只要结构/定义具有逻辑意义,重复这些并不是一件大事。如果你想将它分开以便更容易报告等,那么请随意将它们分开。

答案 1 :(得分:1)

您可能想为此创建3个表:

表格位置
location_id PK
location_name_short
location_name_long

例子:
1,纽约,纽约
2,BOS,波士顿

因此,第一张表具有所有可能的起源和目的地

表格旅行路径
travel_path_id PK
位置表的起源FK 位置表的目的地FK

例如:
1,1,2(纽约到BOS)
2,2,1(BOS到NYC)

所以第二个表有所有可能的FROM - TO对

表格离开时间
tavel_path_id travelPath表的FK
出发时间

示例:
1日上午10点 下午1点5分 2日上午12点 下午2点6分

所以第三张表可以有所有的出发时间。

答案 2 :(得分:0)

听起来你正在设计航班/火车时刻表。对于orgin,目的地和出发时间的每种组合,您可能需要考虑分配代理键。在航空业中,这可以被视为特定航空公司的航班号。

您当前的逻辑密钥需要包含出发时间,以确保主键约束(或唯一索引)的唯一性。