我有一个具有以下结构的表,列是原点,目的地,旅行时间和出发时间。主键是原点,目的地和出发时间的组合。有没有办法重新构建这个,以便行中的原点和目的地没有太多重复?
答案 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,目的地和出发时间的每种组合,您可能需要考虑分配代理键。在航空业中,这可以被视为特定航空公司的航班号。
您当前的逻辑密钥需要包含出发时间,以确保主键约束(或唯一索引)的唯一性。