Данные дерева в таблице базы данных MySql

0

У меня есть таблица, которая использует модель списка Adjacency для хранения иерархии. Поэтому мои самые важные столбцы в этой таблице:

ItemId // is auto_increment
ParentId
Level
ParentTrail // in the form of "parentId/../parentId/itemId"

то я создал перед тигром ввода, который заполняет столбцы Level и ParentTrail. Поскольку последний столбец также содержит текущий идентификатор элемента, мне пришлось использовать трюк в моем триггере, потому что столбцы auto_increment недоступны в триггере перед вставкой. Поэтому я получаю это значение из таблицы information_schema.tables.

Все работает нормально, пока я не попытаюсь написать триггер обновления, который обновил бы мой элемент и его потомков, когда элемент изменит родительский элемент (ParentId изменился). Но я не могу обновить свою таблицу внутри триггера обновления. Все, что я могу сделать, это изменить текущие значения записи, но не другие.

Я мог бы использовать отдельную таблицу для данных иерархии, но это означало бы, что мне также нужно было бы создать представление, которое объединило бы эти две таблицы (соотношение 1:1), и я хотел бы избежать этого, это вообще возможно.

Есть ли способ иметь все это в одной таблице, чтобы эти поля (Level и ParetTrail) автоматически устанавливали/обновляли с помощью триггеров?

  • 0
    Что плохого в создании отдельной таблицы для данных иерархии? Это звучит совершенно уместно.
  • 0
    Потому что я хотел бы использовать Entity Framework с MySQL. Наличие двух таблиц заставило бы меня создать представление и сопоставить его с моим классом сущностей. Обновление экземпляров сущностей (или создание новых) будет невозможно. Я предполагаю.
Теги:
triggers
hierarchical-data

1 ответ

2
Лучший ответ

Это звучит так, как будто это возможно, но это будет связано с тяжелым сопоставлением строк и т.д. Не хотелось бы копаться в нем.

Если вы хотите немного изменить модель базы данных и реализовать Nested Set (прокрутите страницу вниз), это, вероятно, можно было бы сделать легко, указав значения триггера влево-вправо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню