jsk*_*dd3 3 mysql sql database-design database-normalization
这里的目标是能够查询数据库为它提供一个旅的基础上,旅数据库将返回所有的停止代码通过这次旅程中运行.
因此,例如,我需要能够说,"选择贯穿34行程的所有停止代码".这应该只返回STOP CODE:SZDASDASDE.(在生产中将返回更多代码).

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

您还可以看到第二个表,其中每个STOP CODE都有许多JOURNEYS作为父项.据我所知,将多个旅程放入单个字段并不遵循标准数据库设计,所以如果有人可以帮我修复,我会非常感激.
这些图像是在微软的Excel中拍摄的,只是为了计划我将如何做到这一点,生产将使用MySQL数据库.
谢谢
停止代码和旅程之间有很多关系.要根除这一点,你需要分解关系.
为了做到这一点,你需要一个中间表,我们称之为JourneyStopCode,它看起来像:
JourneyStopCode:
JourneyStopCodeID (primarykey)
JourneyID
StopCodeID
Run Code Online (Sandbox Code Playgroud)
然后您的停止代码表将没有JourneyID字段.
要检索旅程的停止代码,您需要执行以下操作:
SELECT * FROM StopCode
INNER JOIN JourneyStopCode ON StopCode.StopCodeID = JourneyStopCode.StopCodeID
INNER JOIN Journey On Journey.JourneyID = JourneyStopCode.JourneyID
WHERE JourneyID = @yourJourneyID
Run Code Online (Sandbox Code Playgroud)
编辑:要可视化:
--------------- --------------------- ----------------
| Journey | | JourneyStopCode | | StopCode |
--------------- --------------------- ----------------
| JourneyID |<--- | JourneyStopCodeID | --->| StopCodeID |
| Description | |----| JourneyID | | | Latitude |
--------------- | StopCodeID |------ | Longitude |
--------------------- ----------------
Run Code Online (Sandbox Code Playgroud)
然后你的数据看起来像:
----------------------------------------
| JourneyID | Description |
----------------------------------------
| 34 | Southampton - Portsmouth |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
----------------------------------------
| StopID | Latitude | Longitude |
----------------------------------------
| SSDAFS | 12345 | 67890 |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
------------------------------------------
| JourneyStopID | JourneyID | StopCodeID |
------------------------------------------
| 1 | 34 | SSDAFS |
------------------------------------------
Run Code Online (Sandbox Code Playgroud)