规范化数据库列

jsk*_*dd3 3 mysql sql database-design database-normalization

这里的目标是能够查询数据库为它提供一个旅的基础上,旅数据库将返回所有的停止代码通过这次旅程中运行.

因此,例如,我需要能够说,"选择贯穿34行程的所有停止代码".这应该只返回STOP CODE:SZDASDASDE.(在生产中将返回更多代码).

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

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

在此输入图像描述

您还可以看到第二个表,其中每个STOP CODE都有许多JOURNEYS作为父项.据我所知,将多个旅程放入单个字段并不遵循标准数据库设计,所以如果有人可以帮我修复,我会非常感激.

这些图像是在微软的Excel中拍摄的,只是为了计划我将如何做到这一点,生产将使用MySQL数据库.

谢谢

mat*_*mmo 5

停止代码和旅程之间有很多关系.要根除这一点,你需要分解关系.

为了做到这一点,你需要一个中间表,我们称之为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)


StopCode

----------------------------------------
| StopID | Latitude | Longitude        | 
----------------------------------------
| SSDAFS | 12345    | 67890            |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)


JourneyStopCode

------------------------------------------
| JourneyStopID | JourneyID | StopCodeID | 
------------------------------------------
| 1             | 34        | SSDAFS     |
------------------------------------------
Run Code Online (Sandbox Code Playgroud)