2012-06-05 3 views
1

Недавно я прошел процесс обновления моей базы данных, нормализуя множество объектов. Очевидно, теперь у меня есть еще несколько таблиц, чем у меня. Множество данных, которые я использую на веб-сайте, доступно только для чтения, поэтому это просто для денормализации с использованием представления, однако существуют сущности, которые могут извлечь выгоду из денормализованного извлечения, но все равно нуждаются в обновлении.Необходимые рекомендации - с использованием структуры сущностей с нормализованными данными

Вот пример.

A User may be a Member 
A Member may have a Profile 
A Member may have an Account 

Кроме того, у меня есть еще 3 таблицы поиска.

Всего существует 3 таблицы для пользователя и 4 таблицы для пользователя.

В идеале я могу создать 2 вида из приведенных выше таблиц.

Однако, Пользователь должен быть обновлен, как и сущности, принадлежащие Участнику. Кроме того, существует 6 отдельных таблиц, связанных с пользователями/членами, то есть FavouriteCategories, которые также необходимо время от времени получать и обновлять.

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

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

Я мог бы добавить как представление, так и таблицы, используя таблицы только для обновлений. Это кажется неаккуратным из-за дублирования, сложности модели, а также недоиспользования функциональности модели EF.

Возможно, я мог бы использовать представление readonly для извлечения данных и создания хранимых процедур. Я считаю, что процесс использования EF с хранимыми процедурами является немного взломанным, поэтому я бы, вероятно, сохранил сохраненные procs от EF и просто передал параметры и вызвал SP с помощью традиционных методов. Это снова похоже на полупустой дом.

Я не так опытен с .net или EF, поэтому я бы оценил некоторые твердые советы ни по методам, о которых я говорил выше, ни к какой-либо лучшей технике, чтобы добиться этого. Я не хочу взламывать файл edmx на этом этапе, потому что ... ну, это просто неправильно.

У меня есть несколько объектов, которые выиграют от правильного решения. Пример пользователя является одним из самых простых, поэтому есть много шансов извлечь выгоду из правильного подхода.

Помощь и совет будут очень признательны.

ответ

1

Вы хотите использовать EF? Если да, используйте либо первый подход, когда вообще не используете представления, и разрешаете EF обрабатывать все или последний подход с использованием представлений и сопоставления хранимых процедур для операций вставки, обновления и удаления.

Возможно также объединение отображаемых видов для чтения и отображения таблиц для модификаций, но это, в основном, первое решение (позволяющее EF обрабатывать все) с дополнительными представлениями для оптимизации некоторых запросов.

Вы не найдете более чистых подходов. Вышеупомянутые подходы являются верным решением вашей проблемы. Вопрос только в том, хотите ли вы сами написать SQL (просмотр и хранимые процедуры) или позволить EF сделать это.

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

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