Моделирование ориентированного графа со специальным центральным узлом

StackOverflow https://stackoverflow.com/questions/1180078

Вопрос

Я ищу мнения о том, как смоделировать ориентированный граф, содержащий один специальный узел.

Специальный узел:

  1. Не может иметь никаких ребер, ведущих к нему.
  2. Не может быть удален.

Текущий дизайн:

Таблицы:Узлы, Ребра.Ребра содержат два столбца;from_node_id и to_node_id, каждый из которых ссылается на запись в таблице узлов.

Вместо того чтобы хранить специальный узел в качестве первой записи в таблице Nodes, я решил вообще не вести для него запись, создав его отдельно от любых запросов к базе данных.В таблице Edges значение NULL приобретает особое значение в столбце from_node_id, относящемся к центральному узлу.

Моей мотивацией для использования этого дизайна было то, что мне не пришлось бы беспокоиться о защите записи центрального узла от удаления / модификации или ссылки в столбце to_node_id таблицы Edges.Это также автоматически предотвратило бы переход ребра от одного и того же узла к другому.Я понимаю, что у этого дизайна есть некоторые недостатки, такие как невозможность создать из from_node_id и to_node_id составной первичный ключ и, вероятно, многие другие.

В настоящее время я склоняюсь к тому, чтобы сделать центральный узел фактической записью и создавать проверки для этого узла в соответствующих методах базы данных.Каков наилучший способ реализовать этот дизайн?

Это было полезно?

Решение

Я вижу некоторые аргументы против использования NULL в этом случае.

  1. Если узлы содержат фактические данные, вам пришлось бы жестко закодировать данные для центрального узла в приложении.
  2. Возникнут проблемы, если удастся изменить центральный узел.
  3. Обычное значение NULL заключается в том, что значения нет или оно неизвестно.Из-за этого другой человек, который подходит к предлагаемому дизайну, может счесть его неинтуитивным.

Другими словами, я бы предпочел иметь строку в базе данных для центрального узла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top