Может ли nhibernate / orm поддерживать eav? - PullRequest
4 голосов
/ 18 июля 2009

Я недавно унаследовал систему, которая в значительной степени опирается на структуру базы данных EAV и действительно испытывает трудности с точки зрения производительности.

Я хочу использовать nhibernate или другой подходящий ORM-продукт для сопоставления этих таблиц EAV с сущностями таким образом, чтобы мы могли сопоставить строку со свойством. Затем мы можем провести рефакторинг базы данных, чтобы сделать ее реляционной. Кто-нибудь знает возможно ли это? Пример также будет оценен! :)

Чтобы почувствовать структуру, она выглядит примерно так:

Entity (EntityId) EntityVarchar (EntityId, VarcharValue) EntityFloat (EntityId, VarcharValue)

и так далее. Если бы у меня была сущность Customer, я бы хотел использовать имя Customer.Name, чтобы получить имя, а не Customer.Varchar ["Name"].

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

1 Ответ

1 голос
/ 18 июля 2009

Не думаю, что это будет так просто. Хотя есть генераторы, способные читать схему базы данных и генерировать соответствующие отображения и классы, это приведет только к уровню доступа для вашей существующей базы данных eav db. Чтобы сгенерировать реляционную версию этой базы данных, вам потребуется прочитать данные и создать новые доменные объекты, содержащие свойства для значений, установленных в вашей базе данных. Скорее всего, это может привести к одной большой таблице, содержащей все свойства, существующие в eav db. Поэтому я думаю, что лучшим подходом было бы создание модели реляционной БД вручную, анализируя существующие данные и учитывая потребности вашего приложения. Особенно Таблица наследования должна быть вашим другом здесь. Затем, после создания слоев доступа для обеих схем, вам все равно придется написать сопоставление для переноса данных.

...