我正在研究旅行时间表系统。特定目的地至少有三(3)个出发时间。这些出发时间根据日期类型(峰值或非峰值)而变化。以下是我当前设计的描述:
DepartureTable
- >所需的输出将显示在如下表格中:
routeABC | 6:30 | 6:45 | 6:50 | peak
routeABC | 6:40 | 7:00 | 8:45 | non-peak
routeXYZ | 7:00 | 7:30 | 7:40 | peak
请通过1NF测试(我怀疑是因为重复的列名)?
答案 0 :(得分:0)
这可能是你希望的答案。
您的输出
routeABC | 6:30 | 6:45 | 6:50 | peak
包含的信息比您想象的要多。
交通系统包括车站,车辆,出发时间,路线和航线起飞时间。
让我们先取站。我们将创建一个Station表。
Station
-------
Station ID
Station Name
Station Address
...
通常,表名是单数。 Station ID是一个无意义的数字,通常是一个自动递增的整数,它在内部标识表中的行。另一个名字是盲键。 Station ID是Station表的主键。
Station表中的所有信息都与电台有关。这是第三种正常形式。查看表格是否处于第三范式的简便方法是问自己这个问题。
数据是否与密钥,整个密钥以及密钥有关,请帮助我Codd?
关键是第一种正常形式。
整个关键是第二范式。
除了关键是第三范式之外别无其他。
接下来,我们将查看Vehicle表。
Vehicle
-------
Vehicle ID
Vehicle Type (Bus, Light Rail, Heavy Rail, etc.)
Vehicle VIN
Vehicle License Plate
...
车辆ID是主键。它是一个自动递增的整数。它可以与我们之前谈到的Station ID具有相同的值。但是,这些相同的值表示数据库中的不同行。
每个车站有一个或多个出发时间。在你的问题中,你提到了3个出发时间。通过规范化数据库,您可以允许超过3个出发时间。
让我们看看出发时间表。
Departure Time
--------------
Departure Time ID
Departure Time Stamp.
Station ID
主键是Departure Time ID,一个自动递增的整数。对于不同的出发时间标记,可以重复相同的站ID。该表还有一个索引(车站ID,出发时间戳DESCending)。
我们创建了三个表,车站,车辆和出发时间。这些表称为域表,因为它们描述了我们域中的对象。车站和车辆是物理对象。出发时间不是物理的,但它仍然是一个对象。
让我们来看一下路线表。
Route
-----
Route ID
Vehicle ID
Route Type (Peak, Non-peak, etc.)
路由ID是主键,是一个自动递增的整数。车辆ID是来自Vehicle表的盲密钥。使用盲键,我们创建从Route表到Vehicle表的关系。
路线有一辆车。路线有一种类型。
路线有一个或多个出发时间。
让我们看一下路线离港表。
Route Departure Table
---------------------
Route ID
Departure Time ID
Departure Time Sequence
主键是(路线ID,出发时间序列)。我们需要两列来创建唯一的主键。
路径ID是路由表中的盲密钥。
出发时间ID是出发时间表中的盲密钥。
出发时间序列是一个整数,在排序时,按顺序给出出发时间。这是因为路线可以在午夜过后。
我希望您不要将此视为过于复杂的解决方案。我们对数据库进行规范化的原因是我们不会复制数据,我们可以混合和匹配数据以获得不同的输出。公交车司机的时间表看起来不同,与公交车骑手的时间表不同。