Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Когда следует использовать представления? 
:(
    Опции темы
Bikutoru
Дата 9.4.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: нет
Всего: 22



Здраствуйте. Возник следующий вопрос: "Когда имеет смысл использовать представления?"

Навскидку, нашел такие случаи:
1. Какой-то запрос используется многократно как самостоятельно, так и как часть других более сложных запросов - в этом случае, чтобы "не пугать" программиста их можно "спрятать" за педставлением.
2. Часть данных создается динамически по хранящимся (например, несколько текстовых полей соединются в одно или над несколькими полями производятся какие-то вычисления) - хранить такие данные не очень хорошая идея из-за проблем с поддержанием их актуальности, а "заставлять" программиста знать тонкости их получения значит усложнять приложение.

Т.о., мой вопрос разбивается на три:
1. Прав ли я в своих рассуждениях?
2. Какие другие моменты применения представлений я упустил?
3. В какой книге про это можно почитать?

Заранее спасибо


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Vit
Дата 9.4.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Приведенные вами примеры в принципе работают но очень усложняют запросы... Это сильно сказывается на производительности. Вообще-то ответ будет таким - вообще не использовать нигде если без них можно обойтись. Есть 2 случая когда они очень нужны.

1. Для защиты данных
Например "Select Name From Table1" - пользователю даётся доступ к этому View, а не к исходной таблице и он не может оперировать никакими другими полями кроме Name, Или "Select * From Table Where UserID=3" - тогда пользователь будет иметь данные которые относятся только к нему. В целом именно это и служит причиной создания View в подавляющем большинстве случаев. Как правило вам надо дать ограниченный доступ к базе данных для другого програмимиста, например программисту из другой компании - партнёра, вам надо дать доступ только к определённым данным, вы создаёте вместо таблиц какое-то количество View и даёте ему доступ только к ним. Этот программист сможет полноценно работать с вашей базой - делать запросы, отчёты и т.п. но оперировать только теми таблицами, столбцами и колонками которые вы ему разрешили


2. Когда таблица состоит из результатов каких-то сложных функций, например

Create View N as
Select GetDate() as CurrentDate, NewId as RandomGuid




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Bikutoru
Дата 10.4.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: нет
Всего: 22



Vit, спасибо за ответ. Как я понял, представление - это результат некоторого компромисса между программистом, которому не хочется писать сложные запросы, и пользователем, которому не хочется долго ждать отклика от приложения.


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
chief39
Дата 10.4.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Bikutoru @ 10.4.2006, 10:39 Найти цитируемый пост)
Vit, спасибо за ответ. Как я понял, представление - это результат некоторого компромисса между программистом, которому не хочется писать сложные запросы, и пользователем, которому не хочется долго ждать отклика от приложения.

ДА.
Что-то вроде компромисса между ассемблером и высокоуровневым ООП.

Кроме того, желая создать вьюху, помни о том, что из неё тоже придётся производить выборки. :-/
И если скрытие за вьюхой 10-табличного запроса со сложными вычислениями может быть оправдано, то две таблички в куче - вряд ли. "Селекционер" вместо 5 строк напишет 3, но до этого будет искать вьюху и разбираться с её назначением, дабы не "поймать" скрытую логическую бомбу.
Тем более "селекционеру" придётся знать и понимать не только стуктуру и смысл таблиц, а и структуры, смысл вьюх.
Кроме того вьюха нечасто будет универсальной. Каждому селекционеру может понадобиться что-то своё - придётся создавать целый "модельный ряд" вьюх, и знакомить с ним всех возможных "покупателей" smile

От таковских минусов накопал... хотя к вьюхам у меня вроде отношение ровное smile



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
batigoal
Дата 11.4.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



На нашем проекте была еще одна цель (изначально) - вьюхи использовались в качестве дополнтельного слоя абстракции. То есть приложение не должно было работать с таблицами напрямую. Благодаря этому мы могли бы впоследствии менять структуру таблиц без изменения приложения. Но впоследствии от этого отказались.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.