Наш клиент рекламирует товары, но их характеристики сильно отличаются друг от друга. Продуктовых «классов» почти столько же, сколько и продуктов.
Первоначально мы создали базу данных EAV, в которую добавляли и удаляли атрибуты для каждого «класса» продукта. Все это работает очень хорошо, но сложность сводит с ума. Это база данных № 1.
Мы наконец-то придумали набор общих полей для представления всех продуктов (POCO), переместив «лишние» поля в поле XML «перехватить все». Это база данных № 2.
Теперь у нас есть клиенты, использующие старые, и некоторые клиенты, которые будут использовать новые. Мы действительно не хотели обновлять старую версию, пока нам не потребовалось это сделать, но время от времени у нас бывают изменения, которые просто требуют больше времени, чем необходимо, из-за структуры EAV.
Вопросы:
- Есть ли какие-нибудь примеры того, как кодировать EF для сохранения POCO в базах данных EAV (где у вас есть таблица имен полей и таблица данных)?
- Должны ли мы просто отбросить базу данных и написать «нормальные» таблицы для всех этих старых клиентов, учитывая, что время от времени у нас происходят изменения?
Нормальный, конечно, относится к нормальной форме Бойса Кодда.
Мы обработали старую базу данных, применив ее структуру к программному обеспечению, а затем сопоставив ее с POCO в хранилище.