Массив, EAV, сериализованный большой объект для настраиваемых полей?

Я пытался решить сложную проблему структуры данных Mysql для настраиваемых полей для онлайн-приложения. Я новичок в Mysql, поэтому приветствую любой ввод.

Текущая база данных является реляционной базой данных, и каждый пользователь службы будет использовать одну и ту же базу данных и таблицы.

Вот пример того, что я пытаюсь сделать.

Допустим, я пытаюсь создать список. Этот список может содержать до 30 настраиваемых полей. Пользователь может выбирать между 12 уникальными элементами, и каждый элемент может иметь до 15 определяемых пользователем атрибутов.

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

Элементом может быть множество вещей, например: множественный выбор, радиокнопка, поле телефона, адрес, однострочный текст, многострочный текст и т. Д.

Пример атрибутов для элемента множественного выбора (флажка) может быть: красный, зеленый, синий, оранжевый, белый, черный

Примером однострочного текстового элемента может быть: Поле ввода имени.

Каждый элемент также должен иметь определяемое пользователем поле заголовка и поле тега, на которые можно ссылаться и которые можно использовать в других функциях приложения.

Сегментация также очень важна. Пользователь должен иметь возможность сегментировать список на основе любого элемента. Например, пользователь может захотеть сегментировать список «ABC» на основе всех записей, где «красный» присутствует в элементе множественного выбора №1 (у них может быть более 1 элемента множественного выбора для списка).

В этом примере я предполагаю, что массивы, EAV, Serialized LOB будут работать нормально. Однако я не уверен, какая структура лучше всего соответствует моим потребностям в моем масштабе.

В действительности, наиболее вероятно, что в каждом списке будет до 50 000 записей, и существует реальная вероятность 20, 000+ аккаунтов - каждый с многочисленными списками. Поэтому я ищу наиболее эффективную и гибкую структуру.

Чтобы еще больше усложнить задачу, мне также нужно обеспечить эффективный способ добавления / удаления элементов в любой конкретный список в любой момент времени. Например, если пользователь создает список с максимально допустимым количеством настраиваемых полей (30), а затем три месяца спустя решает, что они хотят удалить поле, мне нужен способ найти этот список и все связанные значения для этого настраиваемого поля и затем удалите все значения, тип элемента и его атрибуты. Затем пользователю будет разрешено добавить новый элемент в этот список.

Я просмотрел многие сообщения EAV на этом сайте, а также эту http://www.martinfowler.com/eaaCatalog/serializedLOB.html Это не " Мне кажется, что EAV был бы очень эффективным для моих нужд из-за недостатков извлечения данных.

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

Мы будем очень благодарны за любой ввод в отношении того, как лучше всего структурировать базу данных для этой ситуации. Спасибо!

8
задан Bill Karwin 16 November 2011 в 19:08
поделиться