ФорумПрограммированиеPHP для идиотов → "Эластичная" структура БД

"Эластичная" структура БД

  • test10

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 11 октября 2010 г. 5:17

    Есть php nanoCore engine. Который используется на 100 сайтах, один и тот же код, но разные конфиги, которые инклюдятся для разных доменов. Есть таблица с новостями. В которой есть основные поля (title, stamp, tizer, body, etc). Для одного из 100 сайтов понадобилось 3 дополнительных поля в таблице новостей. Создавать в базе дополнительные поля - бессмысленно.

    Но база - пол беды, nanoCore engine общие для всех сайтов. И как сделать обработку этих дополнительных полей для определённого сайта? Написание кучи if - утопия. Если таких полей и сайтов будет 100, то получится треш….

    Вопрос:Как сделать так чтобы при общем движке и подмене только конфига была возможность на определённом сайте расширить кол-во полей, не изменяя структуры основной таблицы.

    Решение:
    1. Хранить все дополнительные поля в json формате в одном дополнительном поле.
    2. Транспонированная таблица (newsID, fieldType, fieldValue).
    3. ??

    Какие есть мысли?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 11 октября 2010 г. 5:24, спустя 6 минут 35 секунд

    php nanoCore engine

    ололо


    а база одна для всех сайтов или для каждого сайта своя?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 октября 2010 г. 5:25, спустя 1 минуту 9 секунд

    3. 1 или 2 - по вкусу :)

    я бы даже за вариант №1, если не надо будет потом искать по этому полю.
    Спустя 20 сек.
    ну и конечно же EAV!
    Сапожник без сапог
  • test10

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 11 октября 2010 г. 5:29, спустя 4 минуты 9 секунд

    php nanoCore engine

    конечно же не имеющий аналогов и тд…надеюсь понятно что стёб.
    а база одна для всех сайтов или для каждого сайта своя?

    да и база и возможно таблица общая

    если не надо будет потом искать по этому полю.

    Поиск скорее да, чем нет, поэтому первый вариант неудовлетворителен. Меня еще беспокоит вопрос, что на это скажет мускул при отсутствии индексов при выборке по нескольким полям.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 октября 2010 г. 5:31, спустя 2 минуты 5 секунд

    Меня еще беспокоит вопрос, что на это скажет мускул при отсутствии индексов при выборке по нескольким полям

    скажет "а не ахуел ли ты?!". проставь индексы, что мешает?
    Сапожник без сапог
  • test10

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 11 октября 2010 г. 5:37, спустя 6 минут 17 секунд

    проставь индексы, что мешает?

    получается все индексы в транспонированном варианте таблице будут ставиться на fieldType и fieldValue, и при необходимости fulltext, запрос будет превращаться в
    WHERE fieldType = 'needType' AND MATCH(fieldValue) AGAINST('needValue')

    Спустя 87 сек.
    в общем вариант имеющий право на жизнь и должно быть всё ок?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 октября 2010 г. 5:38, спустя 10 секунд

    транспонированном

    алгебра вспоминается при этом слове … транспонированная матриц ^^
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 11 октября 2010 г. 5:40, спустя 2 минуты 31 секунду

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

    ну то есть CMS'ка проверяет наличие локального модуля "новости" в папке где конфиги хранятся, если он там есть - грузит его. Если его там нет - берет мастер-модуль из папки где она установлена
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 октября 2010 г. 5:53, спустя 12 минут 48 секунд

    Абырвалг, можно вопрос? нахуй ты всегда так усложняешь? :D
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 11 октября 2010 г. 5:57, спустя 4 минуты 33 секунды

    Потомучто Keep it simple, stupid - это суто америкоская фича)
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 11 октября 2010 г. 6:53, спустя 55 минут 40 секунд

    alter table + create index (по необходимости)
    Спустя 58 сек.
    это позволит сэкономить место, но сложнее кодить
    если хочется простоты - то вариант 2 с составным индексом подойдёт
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!