【发布时间】:2015-12-11 23:54:07
【问题描述】:
将多个表的公共子集分成具有类型键的自己的表是否有优先级?
示例: Hipmunk 允许您搜索带有“行程详情”的航班
{
departure_location: Orlando,
destination_location: Miami,
departure_date: 2016-05-05,
return_date: 2016-05-10
}
搜索后会有一个最近的搜索跟踪器,您可以将航班保存到“我保存的航班”中。此外,如果您预订了航班,那么大概也有记录。所以下面的表格都会有共同的“旅行细节”加上其他一些内容。
那么复制所有表中的列或为这个公共对象创建一个公共表是否有好处。如果所有 3 个表都具有 from、to、departure、arrival 或者将其抽象为一个 trip_details 表是否有好处从,到,到达,离开,类型。类型将是用于搜索、保存、预订的枚举。
我被要求提供一些示例表,所以他们在这里
方法 1
recent -> id,from,to,departure,return,user_id
saved -> id,from,to,departure,return,user_id,flight_id
booked -> id,from,to,departure,return,user_id,flight_id,confirmation_number,payment_type... etc
方法 2
trip_details -> id,from,to,departure,return,user_id, type(recent,saved,booked)
recent -> id, trip_details_id, user_id
saved -> id, trip_details_id, user_id, flight_id
booked -> id, trip_details_id, user_id, confirmation_number, payment_type... etc
注意: 行程详情行将永远不会在 3 个表格之间共享。方法2不会减少冗余数据
编辑 为了帮助澄清,这些不是我的表格,我试图在摘要中弄清楚这一点。也可能编程的一个例子会有所帮助。 请不要太在意实现细节,因为我正在试图弄清楚“如果 3 个表都有 5 个相同类型的列并且在概念上代表一个对象,如果该 '对象' 存在自己的表?即使移到自己的表也不会减少数据冗余?”
var recentSearch = {
tripDetails: {
departure_date: '2015-01-05',
return_date: '2015-01-10',
from: 'Orlando',
to: 'Chicago'
}
}
var savedSearch = {
tripDetails: {
departure_date: '2015-01-05',
return_date: '2015-01-10',
from: 'Orlando',
to: 'Chicago'
}
}
var booked = {
flight_id: 1234,
confirmation_number: 3456,
book_date: '2015-12-12'
tripDetails: {
departure_date: '2015-01-05',
return_date: '2015-01-10',
from: 'Orlando',
to: 'Chicago'
}
}
【问题讨论】:
-
听起来您将从了解更多关于normalized databases 的信息中受益。这是有用的信息。
-
将它们移动到 trip_details 不会有助于减少数据冗余,因为搜索可以存在与保存的航班相同的详细信息。看来规范化只适用于防止数据重复
-
您只需要三个表。旅行,保存,预订。最近没看懂
-
trips 将是 all_trips_available,save 只是保存的其中一个行程,没有任何冗余细节。预订将有预订详情 + trip_id + “当前行程详情可能会在较长时间内发生变化”的日志
标签: sql database database-design