Статья Автор: Деникина Н.В., Деникин А.В.

V. Карта расстояний

Что такое star_map?

Это особенная таблица — она хранит связи между звёздами (расстояния). У неё нет собственного id, зато есть два «чужих ключа»:
 
star_map
├── star_from_id  → откуда летим (ссылка на stars.id)
├── star_to_id    → куда летим   (ссылка на stars.id)
└── distance      → расстояние в парсеках
Таблица-связка (или «таблица-мост») — хранит отношения между объектами одного типа. Часто встречается в задачах на графы, маршруты, дружбу в соцсетях.

Карта из системы Хезе

Хезе (1)
├── → Альтаир (2): 20 пк ✅
├── → Вега (3): 25 пк ✅
├── → Сириус (4): 30 пк ❌ (бак = 25)
└── → Процион (5): 40 пк ❌

При баке на 25 парсек из Хезе доступны только Альтаир и Вега.


Примеры запросов

1. Все маршруты из Хезе:
SELECT * FROM star_map
WHERE star_from_id = 1;

2. Доступные системы (расстояние ≤ 25) с названиями:
SELECT stars.name, star_map.distance
FROM star_map
  JOIN stars ON star_map.star_to_id = stars.id
WHERE star_map.star_from_id = 1
  AND star_map.distance <= 25;
Обрати внимание: star_map присоединяется к stars по star_to_id, потому что мы хотим узнать название пункта назначения. Если бы нужно было название пункта отправления — соединяли бы по star_from_id.
Печать