0

Меня попросили придумать модель логических данных для приложения. Я идентифицировал все сущности и документировал их с помощью ERD. Теперь коллега предлагает некоторые изменения, с которыми я не согласен, и мне нужны причины и против моего и его подхода, чтобы иметь возможность найти наилучшее решение проблемы.Entity-Диаграмма взаимоотношений

Так в основном дискуссия по этому вопросу: У меня есть объект, как этот:

The_Entity

  • Атрибут 1: Строка
  • Атрибут 2: строка
  • Атрибут 3: булево

И мой коллега предлагает делать

The_Entity

  • the_entity_id: ПК

Атрибут

  • the_entity_id: ФК
  • Название: Строка
  • значение: Строка

Так что в основном моделирование атрибутов как объектов тоже.

Я думаю, что мой подход более ощутим семантически, но он также более статичен (в реализации добавление атрибута потребует добавить столбец в таблицу). Что вы думаете об этом?

+0

http://tonyandrews.blogspot.co.uk/2004/10/otlt-and-eav-two-big-design-mistakes.html – sqlvogel

ответ

2

Какого сотрудник выступает называются "Entity-Attribute-Value" или EAV и широко считаются антишаблоном. (Google вокруг для «EAV evil», и вы найдете много примеров.) Если вы хотите, чтобы боеприпасы для почему вы не должны делайте это так, как предлагает ваш коллега, вам не составит труда найти его.

Сказав это, вы обнаружите, что если вы посмотрите на мои ответы на SO и DBA.SE, я являюсь редким сторонником EAV в определенных конкретных обстоятельствах, где плохие вещи об EAV неприменимы. Тем не менее, поскольку мы не знаем, удовлетворяет ли ваша конкретная модель этим исключительным условиям, я бы сказал, что безопасно избегать EAV.

+0

Эй, спасибо большое. Я был уверен, что это была общая проблема, но даже не знала, как это сделать. Теперь я знаю :) –

2

Согласен с уже полученными ответами.

Самый очевидный случай против EAV - это когда есть бизнес-правила, в которых задействованы атрибуты, которые вы упоминаете. Скажем, в вашем примере «Атрибут 1 и Атрибут 2 не могут быть длиннее ... символов».

Если вы реализуете свой пример с использованием одной таблицы с тремя столбцами, то реализация этого бизнес-правила будет такой же простой и простой, как определение единственного ограничения CHECK для этой таблицы. Правило будет простым и понятным, а также для декодирования другими, которые позже прочтут ваш дизайн, и во время выполнения проверка ограничения будет выглядеть как swoosh.

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

Вы также попросите своего друга, как он намеревается включать атрибуты в свой дизайн, если значение этих атрибутов является целым числом, или датой или поплавком, или логическим, или любым другим типом, который СУБД имеет предлагает. (Он не может придерживаться одной таблицы, не создавая проблемы с производительностью, чтобы отключить любое число во время чтения и перевести любое число во время записи. И это кошмар для копыта CPU.)

Что ваш друг «на самом деле» используется самой СУБД для документирования структуры пользовательских баз данных. Каталоги СУБД знали, что структура на протяжении десятилетий (за исключением части «V», конечно, каталоги - это EA, так сказать, EAV без V), поэтому это не совсем «новая» идея в любом смысле.

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

Типичный случай, когда ЭАФ подход может быть приемлемым, для работы с вопросников. Если вопросник на самом деле не стабилен на 99,99% (может растягиваться с течением времени), и не так много «правил», которые применяются к «как он должен быть заполнен» (если ответ на вопрос 7 был «да», то вопрос 8 должен быть дан ответ), а ответы на вопросник обычно проверяются более подробно в «изоляции», чем в «комбинации», тогда большинство недостатков EAV не применяются и могут быть справедливо рассмотрены.

Смежные вопросы