Ответы пользователя по тегу MySQL
  • Как правильно поступить с EAV архитектурой, где для каждого типа значения своя таблица?

    dubr
    @dubr
    пыхарь
    Вместо дополнительных таблиц под каждый тип можно создавать дополнительные столбцы.

    entity_id       # INT, ссылка на объект, которому принадлежит свойство
    attribute_id    # INT, ссылка на инфу о свойстве
    value_int       # INT, значение целочисленное
    value_varchar   # VARCHAR, короткий текст
    value_text      # TEXT, длинный текст
    value_whatever  # и так далее: DATETIME, ENUM, DECIMAL


    Так раньше было сделано в Битриксе, например (как сейчас не знаю). При таком подходе мы можем собрать свойства отдельной энтити одним запросом (без юнионов), но таблица получается разреженной, большую часть значений составляют NULL-ы.

    Отдельная таблица на тип создается, например, в Magento (опять же надо проверить, но раньше было так, и вряд ли они радикально меняли схему). Можете посмотреть, какие запросы генерирует их ORM.

    Ну и вообще поковыряйте разные e-commerce продукты, EAV в каком-то виде реализован у всех.

    Если вас пугает именно написание джойнов - зря пугаетесь, один фиг завернете их в какой-то API, потому что писать такое руками - утомительно и ведет к ошибкам.

    Если вас пугает производительность схемы - ну, в идеале надо тестировать на ваших данных с вашими сценариями. Если лень или пока нет ни данных, ни сценариев ;) погуглите бандл / модуль для своего фреймворка и пляшите от него.
    Ответ написан
    1 комментарий