За последние 24 часа нас посетили 36528 программистов и 1713 роботов. Сейчас ищут 810 программистов ...

Таблицы с зависимостями.

Тема в разделе "MySQL", создана пользователем wir_wolf, 21 дек 2014.

  1. wir_wolf

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

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Доброго времени суток. В ходе разработке крупного проекта понадобилась сделать систему зависимостей.
    Я помозговав немного сотворил такое чудо.
    [​IMG]
    Суть в том, что есть таблица зависимостей в которой указан
    ID постройки
    (уровень постройки - не используется)
    тип - если там 1 то зависимость от другой постройки если 2 то от еще какой то сущности
    item_id - id той сущности
    level - уровень той сущности у пользователя.
    Вопрос собственно в том чтоб каким то образом минимизировать запросы к БД и сделать систему проверки зависимостей максимально простой.
    Ибо получается что мне нужно выбрать с таблицы зависимости где id постройки равен к примеру 11, потом перебрать этот массив, через swith по типу потянуть либо Buildings_Data либо еще какую то таблицу где id постройки равен item_id, а если в одной зависимости 5 параметров и все к разным таблицам, о как то не камельфо по скорости.
    PS. Если есть какие то предложения по переработке структуры системы с зависимостями, я буду рад.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно добавить больше дублирование данных, чтобы обойтись меньшим числом запросов
     
  3. ciamon

    ciamon Новичок

    С нами с:
    19 дек 2014
    Сообщения:
    34
    Симпатии:
    0
    Задачи по оптимизации баз данных начинаются с глубочайшего изучения системы. Не пары таблиц, а всей БД и всей зависимой логики. Вполне может оказаться, что какие-то данные вообще выгодно хранить не в базе данных, а где-то в другом месте или хранить в БД, но в сериализованном виде. А быть может нужно выделить общие данные (с частичным дублированием) в отдельную таблицу таким образом, чтобы "item_id" всегда ссылался на одну конкретную таблицу.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    непонятна предметная область, например абсолютно неясно что такое "зависимость" и тем более что такое "уровень сущности у пользователя".
    чисто формально, вызывает сомнение, что ты собираешся перебирать какие-то массивы и решать к какой таблице обратиться на основании каких-то "переключателей". это заведомо провальная стратегия.

    Добавлено спустя 1 минуту 41 секунду:
    sql создан для обработки множеств — вот его и нагружай этими множествами. для каждой связи между сущностями заведи по отдельному полю, либо даже по ссылочной таблице, если это связь много-ко-многим.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Если выборку и БД нужно гнать в цикле через свитчи, значит выборка была сделана заведомо неправильно. Вся суть SQL в том, чтобы сказать базе, что те надо и забрать у нее что ты хош. В уже готовом, без лишнего мусора и, даже, отсортированном виде.