База данных EAV Плюсы / минусы и альтернативы - PullRequest
31 голосов
/ 08 февраля 2010

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

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

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

Ответы [ 4 ]

30 голосов
/ 08 февраля 2010

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

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

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

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

2 голосов
/ 23 сентября 2012

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

0 голосов
/ 01 июня 2018

Платформа Streams предлагает альтернативный способ, основанный на Streams ( на самом деле, это модель домена ), Fields и Назначения сущностей.

0 голосов
/ 08 февраля 2010

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

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

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