За последние 24 часа нас посетили 17719 программистов и 1620 роботов. Сейчас ищут 1812 программистов ...

Древовидные стрктуры в базе данных

Тема в разделе "PHP и базы данных", создана пользователем nurbek, 12 июл 2008.

  1. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    Расскажите способы вывода древовидных стрктур из базы данных.
    Заранее спасибо!
     
  2. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    да и вообще киньте ссылку кто сталкивался с этими структурами. Пожалуйста.
     
  3. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    nurbek
    Дело не в способе вывода, а в способе хранения. Если данные хранятся в неудачной форме, нормального вывода все равно не придумать.
    В качестве интересного способа хранения могу предложить Nested Sets.
     
  4. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    ну я насчет методов, как я знаю есть методом рекурсии...
    можете ещё какие-либо основные сказать?
     
  5. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    nurbek
    Метод рекурсии - это что? Делать по отдельному запросу для каждой записи?
     
  6. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    nurbek, 3 способа, которые мне по душе:
    1) хранить в БД только id родителя и при выборе предков или построении дерева уходить в рекурсию в PHP;
    2) хранить в БД только УРИ (вроде parent/children). Удобно по like выбирать предков да и сортировать + строить дерево чень просто;
    3) хранить в БД id родителя и уровень. При записи в БД пускать рекурсию и записывать/перезаписывать уовень. Ну, и при каждом выводе рекурсия не нужна, достаточно order by уровень.

    1) Метод самый кошерный, имхо. Где есть глюки и тормоза, там есть и кэширование.
    2) Самый простой и удобный, но УРИ должны быть жёсткие и выступать в роли альтернативы id. Это мне кажется неправильным.
    3) Если в первом методе глюки и тормоза будут при выводе и их решит кэш, то тут кэш не помощник, т.к. все глюки и тормоза будут при записи. При выводе в случае глюка дерево не увидит один посетитель, а в случае глюка при записи - все.