Мнение экспертов об очень большом количестве столбцов в таблице MySQL? - PullRequest
3 голосов
/ 26 октября 2009

Я создаю инструмент для редактирования веб-страниц в CMS. Основная цель инструмента - полная гибкость для пользователя. Поэтому в нем можно отредактировать множество свойств, например: (фрагмент):

langbutton_menu_border_color_left 
langbutton_menu_border_width_left
langbutton_menu_border_style_left 
langbutton_menu_border_color_right

... вы получаете дрейф. На сегодняшний день у меня 238 таких свойств, в основном целые числа и короткие строки. Теперь я должен создать таблицу MySQL для данных. У меня есть несколько лет опыта веб-разработки, и было даже абсолютным табу даже подумать о том, чтобы поместить 238 столбцов в таблицу mySQL. Но, подумав, я начинаю думать, а почему бы и нет?

Это самая удобная вещь для меня сейчас, так как моя CMS, в которую я интегрирую этот новый инструмент, имеет набор готовых входных элементов, которые связаны с отдельными столбцами базы данных. Любой другой способ хранения свойств (например, группирование их так, чтобы свойство border) сохранялось в одном поле) потребовал бы огромных изменений в коллекции, чего я очень хотел бы избежать - я нахожусь в большом проекте и буквально рабочий день и ночь

Я бы создал и изменил таблицу на основе определения XML, чтобы я мог жить с администрированием таблицы из 238 столбцов. Эффективность хранения не важна - ожидаемое количество страниц не будет превышать 50-100. Мне не нужно делать никаких запросов к таблице, за исключением загрузки одной страницы за раз с использованием первичного ключа.

Итак, эксперты по MySQL, есть ли что-либо, что серьезно выступает против хранения данных такого рода в 238 столбцах? Будете ли вы ожидать проблемы, экспоненциальное использование памяти, что-нибудь подобное?

Обычно я бы переводил различные свойства в полные строки CSS и создавал классы, которые могут анализировать и обрабатывать такие строки - что значительно уменьшило бы их число. Но учитывая ограничения по времени?

Ответы [ 3 ]

4 голосов
/ 26 октября 2009

Теоретически, mySQL теперь ограничен 4096 столбцами в таблице (немного меньше, учитывая другие ограничения, то есть значения по умолчанию NULL и т. Д.). Итак, у вас довольно большая разница. Лично в веб-устройстве я стараюсь сохранить количество столбцов <50. Я видел таблицы с более чем 100 столбцами, и это работало, но поддерживать такие таблицы очень сложно. Если вам не нужно искать по этим столбцам, рассмотрите возможность сериализации в массиве php и сохраните значения в TEXT. Это быстрее и гибче. </p>

4 голосов
/ 26 октября 2009

Сколько из этих столбцов необходимо запрашивать и обновлять независимо от других? Какие-либо из этих столбцов участвуют в отношениях с другими таблицами или все они являются просто данными?

Я не знаю ваш план использования, но в некоторых случаях имеет смысл хранить все эти данные в виде BLOB. Это то, что я бы сделал, если он всегда будет получен вместе и не будет участвовать ни в одном запросе.

1 голос
/ 03 ноября 2009

Я пробовал подобный подход раньше. Скорее всего, никто не собирается использовать все 238 свойств для одного элемента.

ИМХО, вам лучше предложить пользователю доступные свойства. Затем позвольте пользователю объединить доступные свойства, выбрав их из списка и установив их значения. Затем вы можете объединить пользовательский ввод в текстовый массив, например [property: value, property: value], и ​​вставить его в один столбец элемента, который вам нужно стилизовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...