Существует разница между EAV, выполненным добросовестно или плохо; 5NF, сделанные квалифицированными людьми или теми, кто невежествен.
Шестой нормальный вид - неприводимая нормальная форма (дальнейшая нормализация невозможна). Он устраняет многие проблемы, которые являются общими, такие как проблема с нулем, и обеспечивает конечный метод определения недостающих значений. Это научная и технически надежная НФ. Для его поддержки нет продуктов, и он не используется обычно. Для правильной и последовательной реализации требуется каталог для метаданных, которые должны быть реализованы. Конечно, SQL, необходимый для навигации, становится еще более громоздким (SQL уже громоздкий re присоединяется), но это легко преодолеть за счет автоматизации производства SQL из метаданных.
EAV - это частичный набор или подмножество 6NF. Проблема заключается в том, что обычно это делается с определенной целью (чтобы добавить столбцы без необходимости изменения DDL), а также людьми, которые не знают о 6NF и не реализуют метаданные. Дело в том, что 6NF и EAV, поскольку принципы и концепции предлагают существенные преимущества, а производительность возрастает; но обычно это не выполняется должным образом, и выгоды не реализованы. Довольно много реализаций EAV - это катастрофы, а не потому, что EAV плохо, а потому, что реализация плохая.
Например. Некоторые считают, что SQL, необходимый для построения строк 3NF из базы данных 6NF/EAV, является сложным: нет, он громоздкий, но не сложный. Более того, может быть предоставлен обычный SQL VIEW, так что все пользователи и инструменты отчетов видят только прямой 3NF VIEW, а проблемы 6NF/EAV прозрачны для них. Наконец, требуемый SQL может быть автоматизирован, поэтому затраты труда, которые многие люди терпят, совершенно не нужны.
Так что на самом деле ответ: Шестой нормальный вид, являющийся отцом EAV и более чистая форма, является заменой для него. Предостережение, убедитесь, что оно сделано правильно. У меня есть один большой бит 6NF, и он не страдает ни одной из проблем, о которых люди публикуют, он прекрасно работает, клиент очень доволен (никакая дальнейшая работа не является признаком полного функционального удовлетворения).
Я уже отправил очень подробный ответ на другой вопрос, который относится к вашему вопросу, а также, что вы можете быть заинтересованы.
Other EAV Question
Вместо того чтобы заменить то, что у вас есть, так как оно действительно соответствует конкретной потребности, вы должны взглянуть на увеличение вашей базовой модели EAV тем, что сохраняет изменения с течением времени. – RibaldEddie
Я согласен с RibaldEddie, это будет непросто, но добавление даты/версии к вашим определениям атрибутов, вероятно, будет проще, чем полностью рефакторинг всего кода, построенного на текущей схеме. – JeremyWeir
Любые шансы на закрытие? Любые комментарии и прогресс, или голосование, и выбор ответа. Благодарю. – PerformanceDBA