3

此处的目标是能够查询为其提供Journey的数据库,基于Journey数据库将返回贯穿此旅程的所有停止代码。

因此,例如,我需要能够说“选择经过旅程 34 的所有停止代码”。这应该只返回 STOP CODE: SZDASDASDE。(在生产中将返回更多代码)。

http://i.imgur.com/9ZBSxmq.png

上面您可以看到数据库中第一个表的图像。

在此处输入图像描述

您还可以看到第二个表,其中每个STOP CODE都有许多JOURNEYS作为父级。据我所知,将多个旅程放入一个领域并不遵循标准的数据库设计,所以如果有人能帮我解决这个问题,我将不胜感激。

这些图像是在 Microsoft 的 Excel 中拍摄的,只是为了计划我将如何执行此操作,生产将使用 MySQL 数据库。

谢谢

4

3 回答 3

5

停止代码和旅程之间存在多对多关系。要消除这种情况,您需要分解关系。

为此,您需要一个中间表,我们称之为 JourneyStopCode,如下所示:

JourneyStopCode:
JourneyStopCodeID (primarykey)
JourneyID
StopCodeID

那么您的 Stop Code 表将没有 JourneyID 字段。

要检索旅程的停止代码,您需要执行以下操作:

SELECT * FROM StopCode
INNER JOIN JourneyStopCode ON StopCode.StopCodeID = JourneyStopCode.StopCodeID
INNER JOIN Journey On Journey.JourneyID = JourneyStopCode.JourneyID
WHERE JourneyID = @yourJourneyID

编辑:可视化:

---------------        ---------------------         ----------------
|  Journey    |        | JourneyStopCode   |         |  StopCode    |
---------------        ---------------------         ----------------
| JourneyID   |<---    | JourneyStopCodeID |     --->|  StopCodeID  |
| Description |   |----| JourneyID         |     |   |  Latitude    |
---------------        | StopCodeID        |------   |  Longitude   |
                       ---------------------         ----------------


然后您的数据将如下所示:

旅行

----------------------------------------
| JourneyID | Description              | 
----------------------------------------
| 34        | Southampton - Portsmouth |
----------------------------------------


停止代码

----------------------------------------
| StopID | Latitude | Longitude        | 
----------------------------------------
| SSDAFS | 12345    | 67890            |
----------------------------------------


JourneyStopCode

------------------------------------------
| JourneyStopID | JourneyID | StopCodeID | 
------------------------------------------
| 1             | 34        | SSDAFS     |
------------------------------------------
于 2013-09-24T14:47:46.097 回答
3

Journeys to stop code 是多对多关系,您最有可能需要一个连接表。

Table 1 :
SID   |   Stop Code   |  Long    |   lat 
0     | ASDFSAFA      | 1        | 2
1     | sdDSGSDGS     | 4        | 0 
....

Table 2 : 
Journey   | Description 
0         | Blah blah blah


Table 3 : 
Journey  | SID 
0        |  1
2        |  1
1        |  4


SELECT A.Longitude, A.Latitude FROM TABLE1 WHERE A.SID IN (
    SELECT SID FROM TABLE3 WHERE JOURNEY = 0
);
于 2013-09-24T14:46:30.887 回答
0

尝试这个:

    TABLE 1
    -------
    JOURNEY (PK) DESCRIPTION

    TABLE 2
    -------
    SEQUENCENO (PK) STOP_CODE LATITUDE LONGITUDE

    TABLE 3
    -------
    JOURNEY SEQUENCENNO 
于 2013-09-24T14:50:03.453 回答