MySql:设计附近站点的表格

时间:2015-10-19 13:29:52

标签: mysql

我有一张分散在世界各地的电台。它看起来像这样:

+--------+------------+-------+-----------+
|   ID   |    NAME    |  LAT  |    LON    |
+--------+------------+-------+-----------+
| 104326 | BERWINDALE | 40.8  | -78.6     |
| 104406 | GRAMPIAN   | 40.9  | -78.7     |
| 121788 | COALPORT   | 40.75 | -78.53333 |
+--------+------------+-------+-----------+

对于我表中的每个电台 S ,我有一个由ID,LAT,LON描述的电台列表,这些电台被认为是 S 附近。对于纽约的一个电台,附近的电台列表很大,至少有50个电台。但是对于廷巴克图的一个车站,附近的车站列表可能只包含1或2个元素,或者是空的。

我如何设计这个"相邻电台表"考虑到我不知道有多少邻居与某个站相关联的事实?我听说过规范化等问题,但作为一个MySql菜鸟,我需要一些详细的演练。

1 个答案:

答案 0 :(得分:0)

您希望规范化数据,以便您的电台表仅存储电台

+--------+------------+-------+-----------+
|   ID   |    NAME    |  LAT  |    LON    |
+--------+------------+-------+-----------+
| 104326 | BERWINDALE | 40.8  | -78.6     |
| 104406 | GRAMPIAN   | 40.9  | -78.7     |
| 121788 | COALPORT   | 40.75 | -78.53333 |
+--------+------------+-------+-----------+

因此,使用此表,您可以创建一个映射表,每个站点的每个邻居都有一行。

+--------+----------------+-----------------+
|   ID   |   STATION_ID   |   NEIGHBOR_ID   |
+--------+----------------+-----------------+
|    1   |     104326     |     104406      |
|    2   |     104326     |     121788      |
+--------+----------------+-----------------+

在这个简单的例子中,它会说GRAMPIAN和COALPORT是BERWINDALE的邻居

拉出邻居你可以做这样的事情。

SELECT s.name as central_station, n.name as neighboring_stations
FROM stations s
JOIN neighbors n ON n.neighbor_id = s.id
WHERE n.station_id = 104326