Форум → Программирование → PHP для идиотов → "Эластичная" структура БД
"Эластичная" структура БД
-
Есть php nanoCore engine. Который используется на 100 сайтах, один и тот же код, но разные конфиги, которые инклюдятся для разных доменов. Есть таблица с новостями. В которой есть основные поля (title, stamp, tizer, body, etc). Для одного из 100 сайтов понадобилось 3 дополнительных поля в таблице новостей. Создавать в базе дополнительные поля - бессмысленно.
Но база - пол беды, nanoCore engine общие для всех сайтов. И как сделать обработку этих дополнительных полей для определённого сайта? Написание кучи if - утопия. Если таких полей и сайтов будет 100, то получится треш….
Вопрос:Как сделать так чтобы при общем движке и подмене только конфига была возможность на определённом сайте расширить кол-во полей, не изменяя структуры основной таблицы.
Решение:
1. Хранить все дополнительные поля в json формате в одном дополнительном поле.
2. Транспонированная таблица (newsID, fieldType, fieldValue).
3. ??
Какие есть мысли? -
11 октября 2010 г. 13:24, спустя 6 минут 35 секунд
php nanoCore engine
ололо
а база одна для всех сайтов или для каждого сайта своя? -
11 октября 2010 г. 13:25, спустя 1 минуту 9 секунд
3. 1 или 2 - по вкусу :)
я бы даже за вариант №1, если не надо будет потом искать по этому полю.Спустя 20 сек.ну и конечно же EAV!Сапожник без сапог -
11 октября 2010 г. 13:29, спустя 4 минуты 9 секунд
php nanoCore engine
конечно же не имеющий аналогов и тд…надеюсь понятно что стёб.а база одна для всех сайтов или для каждого сайта своя?
да и база и возможно таблица общаяесли не надо будет потом искать по этому полю.
Поиск скорее да, чем нет, поэтому первый вариант неудовлетворителен. Меня еще беспокоит вопрос, что на это скажет мускул при отсутствии индексов при выборке по нескольким полям. -
11 октября 2010 г. 13:31, спустя 2 минуты 5 секунд
Меня еще беспокоит вопрос, что на это скажет мускул при отсутствии индексов при выборке по нескольким полям
скажет "а не ахуел ли ты?!". проставь индексы, что мешает?Сапожник без сапог -
11 октября 2010 г. 13:37, спустя 6 минут 17 секунд
проставь индексы, что мешает?
получается все индексы в транспонированном варианте таблице будут ставиться на fieldType и fieldValue, и при необходимости fulltext, запрос будет превращаться вWHERE fieldType = 'needType' AND MATCH(fieldValue) AGAINST('needValue')
Спустя 87 сек.в общем вариант имеющий право на жизнь и должно быть всё ок? -
11 октября 2010 г. 13:38, спустя 10 секунд
транспонированном
алгебра вспоминается при этом слове … транспонированная матриц ^^Сапожник без сапог -
11 октября 2010 г. 13:40, спустя 2 минуты 31 секунду
если б базы были разные - можно было сделать что-то типа локального модуля, а у него своя структура бд.
ну то есть CMS'ка проверяет наличие локального модуля "новости" в папке где конфиги хранятся, если он там есть - грузит его. Если его там нет - берет мастер-модуль из папки где она установлена -
11 октября 2010 г. 13:53, спустя 12 минут 48 секунд
Абырвалг, можно вопрос? нахуй ты всегда так усложняешь? :DСапожник без сапог -
11 октября 2010 г. 13:57, спустя 4 минуты 33 секунды
Потомучто Keep it simple, stupid - это суто америкоская фича) -
11 октября 2010 г. 14:53, спустя 55 минут 40 секунд
alter table + create index (по необходимости)Спустя 58 сек.это позволит сэкономить место, но сложнее кодить
если хочется простоты - то вариант 2 с составным индексом подойдётне всё полезно, что в swap полезло
Пожалуйста, авторизуйтесь, чтобы написать комментарий!