我有一张分散在世界各地的电台。它看起来像这样:
+--------+------------+-------+-----------+
| 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菜鸟,我需要一些详细的演练。
答案 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