Каталог и зависимые ноды

Тема в разделе "Как сделать...", создана пользователем horpah, 6 фев 2011.

  1. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Здравствуйте форумчане. Нужна ваша помощь в организации БД(составить таблицу) каталога. Итак описание задачи.
    Предположим у нас есть каталог такой структуры(представлю дерево отношений ввиде XML для наглядности)
    Код:
    <category1>
      <el1>
        <el1.1></el1.1>
        <el1.2></el1.2>
      </el1>
      <el2></el2>
      <el3></el3>
    </category1>
    <category2>
     <el4></el4>
     <el5></el5>
     <el6></el6>
    </category2>
    
    т.е. у категории дочки-элементы, у которых в свою очередь так же м.б. свои дети. В общем обычное дерево. Нужно как-то представить в этом дереве элемент <ex></ex>, который бы являлся дочерним,например, <el2></el2> и <el6></el6> одновременно, и соответственно, описать его в БД. Смысл его таков данного элемента таков: если выбраны <el2></el2> и <el6></el6>, то доступен и <ex></ex> со своим потомством.
    А теперь от абстракции к конкретике для большего понимания что это и для чего это.
    Предположим, мы продаем автомобили и на сайте пользователю предлагается выбрать себе опции.
    Код:
    <Модель>
      <model1 />
      <model2 />
    </Модель>
    <Привод>
      <2к />
      <4к />  
    </Привод>
    <Двигатель>
     <1800 />
     <2000 />
     <2400 /> = <model2 /> && <4к />  
    </Двигатель>
    <adv>
     <avdopt1> = <model1 /> && <2к />  
     <opt1 />
     <opt2 />
     <opt3 /> 
     </avdopt1>
     <avdopt2>
      <opt4 />
      <opt5 />  
     </avdopt2>
    </adv>
    
    что означает двигатель объемом <2400> доступен у полноприводных <model2 /> а список доп. опций <avdopt1> доступен только для
    model1 c приводом на 2 колеса.
    Прошу помощи в организации для БД таких вот опций, зависимых от наличия или комбинаций других опций.
    Т.е. отношений в булевкой алгебре выгледящик примерно так:
    X = A*B*C(D+E) (X доступно если есть А,Б, D или E, и нет C