Вопрос

Я искал решение для базы данных, позволяющее разрешать пользовательские поля и значения (разрешая неограниченное количество).На первый взгляд EAV показался подходящим, но после некоторого прочтения я уже не уверен.

Каковы плюсы и минусы EAV?

Существует ли альтернативный метод базы данных, позволяющий разрешать определенные пользователем атрибуты / поля и значения?

Это было полезно?

Решение

Это не исчерпывающий ответ, а всего лишь несколько моментов по теме.

Поскольку вопрос также помечен тегом [sql] тег, позвольте мне сказать, что, в общем, реляционные базы данных не особенно подходят для хранения данных с использованием ЭАВ модель.Вы по-прежнему можете спроектировать модель EAV на SQL, но вам придется пожертвовать многими преимуществами, которые дает реляционная база данных.Вы не только не сможете обеспечить ссылочную целостность, использовать типы данных SQL для значений и обеспечить соблюдение обязательных атрибутов, но даже самые простые запросы могут стать трудными для написания.Фактически, чтобы преодолеть это ограничение, некоторые решения EAV полагаются на дублирование данных вместо объединения со связанными таблицами, что, как вы понимаете, имеет множество недостатков.

Если вам действительно нужен бессхемный дизайн, «разрешающий неограниченное количество атрибутов», лучше всего, вероятно, использовать NoSQL решение.Несмотря на то, что недостатки EAV по сравнению с реляционными базами данных также применимы и к альтернативам NoSQL, вам будут предложены дополнительные функции, которые трудно достичь с помощью обычных баз данных SQL.Например, обычно хранилища данных NoSQL масштабируются гораздо проще, чем реляционные базы данных, просто потому, что они были разработаны для решения какой-то проблемы масштабируемости, и в них намеренно отказались от функций, которые затрудняют масштабирование.

Многие платформы облачных вычислений (например, предлагаемые Амазонка, Google и Майкрософт) представляют собой хранилища данных, основанные на модели EAV, где с данным объектом может быть связано произвольное количество атрибутов.Если вы планируете развернуть свое приложение в облаке, вы можете рассматривать это как бизнес-преимущество, а также техническое преимущество, поскольку сильная конкуренция между крупными поставщиками поднимает соотношение цены и качества до очень высокого уровня. путем постоянного улучшения функций и снижения финансовых затрат и затрат на внедрение.

Другие советы

Посмотрите posgtres hstore http://www.postgresql.org/docs/9.0/static/hstore.htmlэто будет делать именно то, что вы хотите, без большинства недостатков

Тот самый Платформа Streams ( Потоки) предлагает альтернативный способ, основанный на Стримы (на самом деле, это Модель Предметной области), Поля и Задания сущности.

Существует ли альтернативный метод базы данных, позволяющий определять атрибуты/поля и значения, определяемые пользователем?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top