Я пытаюсь моделировать, какие страны граничат друг с другом в MySQL. У меня есть три таблицы:Моделирование смежности страны в SQL
nodes
-----
node_id MEDIUMINT
countries
---------
country_id MEDIUMINT (used as a foreign key for nodes.node_id)
country CHAR(64)
iso_code CHAR(2)
node_adjacency
--------------
node_id_1 MEDIUMINT (used as a foreign key for nodes.node_id)
node_id_2 MEDIUMINT (used as a foreign key for nodes.node_id)
Ценит таблица узлов избыточна в этом примере, но это является частью более крупной архитектурой, где узлы могут представлять множество других предметов, кроме стран.
Вот некоторые данные (идентификаторы (которые появляются во всех трех таблицах) и страны)
59 Bosnia and Herzegovina
86 Croatia
130 Hungary
178 Montenegro
227 Serbia
232 Slovenia
Хорватия граничит со всеми другими странами, и это представлено в таблице node_adjacency как:
59 86
86 130
86 178
86 227
86 232
Знак Сербии может отображаться как node_id_1
или node_id_2
. Данные в этой таблице являются, по существу, не направленными данными графа.
Вопросы:
Учитывая название «Хорватия», то, что SQL я должен использовать для получения своих соседей?
Bosnia and Herzegovina
Hungary
Montenegro
Serbia
Slovenia
Будет ли полученная прибыль от повышения эффективности при хранении информации о смежности в виде данных ориентированного графа? Например. Хорватия граничит Венгрия, Венгрия и Хорватия граничит, по сути дублируют хранения отношений:
86 130
130 86
Уже получил SQL для Smarties и деревьев и иерархий, но, к сожалению, много писем Celko проходит у меня над головой. Спасибо за решение! – jetboy