Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Модификация представлений.  [new]
Lamer666
Member

Откуда:
Сообщений: 83
Добрый день.
Хотел узнать мнение экспертов по следующему вопросу.
Например есть база данных в MsSQL 2008-2012, со множеством связанных таблиц. То есть (Есть таблица товаров, таблица единиц измерений, таблица характеристик, таблица остатков, и т.д. и т.д. Для работы сотни менеджеров я хочу создать VIEW (представление) куда собираю сложным(ми) запросом(сами) нужные данные, где одна строка уже содержит все нужные менеджеру данные: товар, кол-во, остаток, ед.изм.)


1. Будет ли корректным решение: создать ПРЕДСТАВЛЕНИЕ (получаемое в результате сложного запроса) и давать работать выше указанным пользователям только с этим представлением?

2. Увеличит ли такое решение производительность (делать один SELECT из простой (заранее удобно собранной) VIEW, чем один, или может несколько СЛОЖНЫХ запросов из реальных таблиц)?

3. Можно ли редактировать данный VIEW в процессе работы? Вернее то что редактировать его можно, это я прочел на (http://msdn.microsoft.com) но насколько это будет замедлять работу пользователей в целом? Насколько это ПРАВИЛЬНО? VIEW при этом переписывается вновь, или редактируется, что происходит с другими пользователями они (теряют доступ в связи с удалением и пересозданием представления, или просто ожидают окончания блокировки)?
Например нужно постоянно менять во VIEW остатки при заказе товара, все остальные данные практически без изменений.

4. Как быть при появлении нового товара, какие существуют варианты обновления VIEW новыми товарами (по таймеру, по событию, или еще как)?

Спасибо большое всем, за ваше мнение.
7 авг 14, 16:52    [16413043]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
1. права можно разграничить, если вам так нужно.
2. зависит от набора данных и оптимальности вашей структуры и покрытия индексов и тд и тп (тестируйте)
3. что-то не то вы видимо читали. вы каким клиентом пользуетесь?
4. тут вообще странная фраза. вы о чём?
7 авг 14, 16:56    [16413083]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Lamer666
Member

Откуда:
Сообщений: 83
Konst_One
3. что-то не то вы видимо читали. вы каким клиентом пользуетесь?

Delphi+ADOConnection+ADOQuery

Konst_One
4. тут вообще странная фраза. вы о чём?


Если в исходный таблицах, на базе которых я создал VIEW, появятся новые строки данных, VIEW надо обновлять, или VIEW сам обновиться?
7 авг 14, 17:33    [16413372]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
если вы во View жёсткие условия отбора данных не будете делать (where c константами по полям), то всё будет ок, фильтруйте уже в своём клиентском приложении
7 авг 14, 17:39    [16413404]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
обновляемый рекордсет я бы не советовал использовать , если у вас view на основе множества join
7 авг 14, 17:40    [16413408]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8301
Представление - это просто скомпилированный запрос с возможностью администрирования. Никакими наборами данных (кроме индексов в некоторых случаях) представление не обладает.
7 авг 14, 17:47    [16413446]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8301
Изучайте справку до понимания...
7 авг 14, 17:48    [16413456]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
o-o
Guest
Владислав Колосов
Представление - это просто скомпилированный запрос с возможностью администрирования. Никакими наборами данных (кроме индексов в некоторых случаях) представление не обладает.

чего это вдруг "Представление - это скомпилированный запрос".
это сохраненный в базе текст запроса, в виде объекта, + права на этот объект:
Views and inline table-valued functions (inline TVFs) are two reusable types of table expressions;
their definitions are stored as database objects. After they have been created, those objects are permanent
parts of the database and are only removed from the database if they are explicitly dropped.

when querying a view or an inline TVF, SQL Server expands the definition of the table expression and
queries the underlying objects directly
, as with derived tables and CTEs.

Because a view is an object in the database, you can control access to the view with permissions
just as you can with other objects that can be queried (these permissions include SELECT, INSERT,
UPDATE, and DELETE permissions). For example, you can deny direct access to the underlying objects
while granting access to the view.
7 авг 14, 18:19    [16413588]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8301
o-o, то есть анализатор берет чистый текст представления, добавляет его в запрос, составляет план и компилирует и выполняет?
7 авг 14, 18:31    [16413628]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
o-o
Guest
Владислав Колосов,

ну да, а что с этим не так?

кстати, термин "компилирует" как раз и означает "составляет план".
т.е. "объект компилируется" -- это не "текст парсится и в базе сохраняется",
это то, что непосредственно перед выполнением происходит,
а не в момент сохранения текста в базе.
ну и "перекомпилируется" = "заново план строится"
7 авг 14, 18:50    [16413700]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
o-o
Guest
Владислав Колосов
o-o, то есть анализатор берет чистый текст представления, добавляет его в запрос, составляет план и компилирует и выполняет?

вот подробно:

SQL Server builds query plans for these types of objects:

Stored procedures.
Scalar user-defined functions.
Multi-step table-valued functions.
Triggers.

For other types of objects than the four listed above, SQL Server does not build query plans. Specifically, SQL Server does not create query plans for views and inline-table functions. Queries like:

SELECT abc, def FROM myview
SELECT a, b, c FROM mytablefunc(9)
are no different from ad-hoc queries that access the tables directly. When compiling the query, SQL Server expands the view/function into the query, and the optimizer works with the expanded query text.
8 авг 14, 01:17    [16414930]     Ответить | Цитировать Сообщить модератору
 Re: Модификация представлений.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Lamer666
2. Увеличит ли такое решение производительность (делать один SELECT из простой (заранее удобно собранной) VIEW, чем один, или может несколько СЛОЖНЫХ запросов из реальных .
пользователям конечно будет проще делать запросы, но производительность может просесть, в десятки или даже сотни раз. Это у вас снаружи представление простое, а внутри очень сложное и каждый раз эта логика будет компоноваться с тем что напишут пользователи над этим view. При этом запрос может стать очень сложным для сервера, что он не сможет найти оптимальный план.
Универсальные решения как правило очень тормозные.
8 авг 14, 03:58    [16415001]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить