Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 188


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 188 (3 мая 2008 г.)

Новым посетителям сайта

SQL Exercises Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 57-ти задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов, которые пригодятся на третьем рейтинговом этапе, который начинается после 138 задачи.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


Новости сайта

§ Два дня перед праздниками сайт работал со сбоями. Это было связано с DDOS атаками на сервер. Поскольку одного непрерывного интервала простоя не было, я не выполняю общей компенсации времени. Просьба обращаться, если кто-то потерял в рейтинге из-за сбоев; будем решать вопрос в индивидуальном порядке.

§ Инфляция заставляет нас поднять цену сертификата. Вероятно, после грядущих праздников, т.е. к следующей рассылке, стоимость сертификата станет 960 рублей (в евро цена останется прежней).

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
12. xuser (139, 140, 141, 142)
18. iglbeat (141)

§ Новые лица в ТОР 100 и вернувшиеся туда:
83. TomGolab (128, 39.921)
97. Plastilin (126, 391.688)

§ Продвинулись в рейтинге:
35. yuriy.rozhok (137, 22.487)
36. ivan.korobov (137, 90.022)
42. modicus (136, 8.450)
79. Shurgenz (129, 12.505)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
114. DeadLock5 (124, 92.050)
130. Sergey79 (120, 191.500)
140. LexusSaD (117, 2.394)
151. Angellore (115, 30.878)
186. Toxa Moskit (121, 40.618)

§ На этой неделе сертифицированы:
TomGolab (A08029080 [BK], B08029080 [AR]) - Wroclaw, Poland
GorA3000 (A08023474) [BK] - г.Пермь, Россия

§ Число подписчиков - 3781

Число участников рейтинга - 16095

Число участников второго этапа - 1344

Число участников третьего этапа - 31

Сертифицировано на сайте - 270

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Сальников С.А. ($erges) 146 44 21 357 62 2.754 3.359 28 28 Apr 2008 02 May 2008
2 Печатнов В.В. (pvv) 146 44 21 357 190 19.165 6.326 28 26 Apr 2008 30 Apr 2008
3 Креславский О.М. (Arcan) 146 44 21 357 452 22.436 12.553 28 26 Apr 2008 02 May 2008
4 Карасёва Н.В. (vlksm) 146 44 21 357 721 64.764 38.288 28 26 Apr 2008 02 May 2008
5 Любченко В.А. (IAS56) 146 44 21 357 600 403.414 373.617 28 26 Apr 2008 30 Apr 2008
6 Держальцев В.А. (MadVet) 145 44 21 354 1108 57.441 25.129 25 28 Apr 2008 28 Apr 2008
7 Голубин Р.С. (Roman S. Golubin) 145 44 21 354 983 92.541 58.822 25 27 Apr 2008 02 May 2008
8 Мурашкин И.В. (lepton) 144 44 21 350 767 37.129 26.815 21 28 Apr 2008 28 Apr 2008
9 Белогурова К. (Katy_Ekb) 142 143 21 346 287 10.733 4.673 18 07 Mar 2008 25 Apr 2008
10 Войнов П.Е. (pаparome) 143 44 21 346 978 3.013 .213 17 28 Apr 2008 29 Apr 2008
11 Северюхин Ю.А. (Venser) 139 142 21 338 335 4.930 .655 14 01 Feb 2008 04 Feb 2008
12 >Борисенков Д.В. (xuser) 142 141 21 343 92 3.219 .926 14 02 May 2008 02 May 2008
13 Тарасов Д.Б. (Gavrila) 141 44 21 340 976 23.390 2.501 14 28 Apr 2008 30 Apr 2008
14 Солдатенков Ю.С. (SolYUtor) 140 142 21 339 703 17.852 2.695 14 20 Apr 2008 01 May 2008
15 Кувалкин К.С. (Cyrilus) 140 142 21 339 1207 13.042 2.782 14 15 Mar 2008 30 Apr 2008
16 Шептунов П.П. (Dzen) 138 142 21 337 279 8.130 3.499 14 02 Oct 2007 15 Nov 2007
17 Селезнёв А.С. (Артём С.) 141 142 21 342 127 15.597 4.279 14 14 Mar 2008 31 Mar 2008
18 iglbeat (iglbeat) 141 141 21 342 260 27.442 6.641 14 30 Apr 2008 30 Apr 2008
19 Мальцев А.В. (Палкин) 138 142 21 337 422 48.788 7.690 14 13 Oct 2007 20 Jan 2008
20 Васьков Е.В. (Johan) 140 142 21 339 611 14.323 12.767 14 21 Mar 2008 20 Apr 2008

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Умрихина Е.В. (Umrikhina) 45 81 94 34 128 342 01 May 2008
2 Потапов С.М. (psm) 39 56 85 28 113 916 02 May 2008
3 Сибиряков А.И. (eli0n) 46 57 97 15 112 1094 28 Apr 2008
4 >Баранова (OP) 47 47 91 3 94 1805 02 May 2008
5 >Епифановский (Stephan) 39 39 75 9 84 2167 02 May 2008
6 Мишин С. (CepbIu) 23 71 48 34 82 459 01 May 2008
7 >Барыльников А.Я. (_lexab_) 43 43 79 2 81 2266 02 May 2008
8 Тимофеев Е.Н. (_WildMage) 40 40 76 0 76 2441 30 Apr 2008
9 Новопашин (Kupnu4) 34 34 63 5 68 2839 27 Apr 2008
10 >Fomichev A.M. (Black Rey) 21 58 38 19 57 1013 02 May 2008
11 >Клюсова А.А. (Клюсова) 14 31 35 19 54 2419 02 May 2008
12 Тарусов О.С. (Oleg_Tar) 22 33 50 0 50 3250 01 May 2008
13 Шевчук Е.Ю. (Shev@) 26 26 47 0 47 4565 29 Apr 2008
14 >Олейник В.А. (Afokolips) 5 31 12 31 43 1868 02 May 2008
15 Епифанов А.А. (andrey_nick) 10 55 21 16 37 1058 02 May 2008
16 Ребров (gavded) 23 23 37 0 37 5552 29 Apr 2008
17 Шадрин И.В. (SADIV) 18 71 34 0 34 461 01 May 2008
18 >raj B.T. (balajitr) 21 21 34 0 34 5995 02 May 2008
19 Вялых П. (pashka) 14 28 32 0 32 4584 30 Apr 2008
20 Selivanova M.V. (Abinsk) 7 26 15 16 31 3184 30 Apr 2008
21 Богданова К.Г. (ksuhendrik) 16 21 28 3 31 5726 28 Apr 2008
22 >Sadilov (s3) 20 20 31 0 31 6562 02 May 2008
23 >tamil P. (tpr) 19 19 29 1 30 6779 02 May 2008
24 Kushner V.N. (Vadim-ant1) 20 20 30 0 30 6793 01 May 2008

Изучаем SQL

Понимание разницы между владельцами и схемами в SQL Sever

Kathi Kellenberger (оригинал: Understanding the Difference between Owners and Schemas in SQL Server )
Перевод Моисеенко С.И.

Сервер SQL 2005 вводит понятие схем в противоположность владельцам объектов, имевшихся в предыдущих версиях. Эта статья объяснит различия между этими двумя понятиями, и, мы надеемся, несколько прояснит непонимание, которое все еще существует в представлениях о схеме.

Владельцы объектов

Чтобы понять различие между владельцами и схемой, давайте посвятим некоторое время рассмотрению понятия собственности объекта. Когда объект создается в SQL Server 2000 или более ранних версиях, он должен иметь владельца. Чаще всего владельцем является "dbo", также известный как владелец базы данных. Допустимо, что объект может принадлежать любой учетной записи пользователя в базе данных. Способ определить владельца можно узнать, если посмотреть на полностью квалифицированное название объекта, которое Вы можете видеть в списке таблиц, используя SQL Server Enterprise Manager или Management Studio. Например, название таблицы с именем orders, принадлежащей dbo, есть dbo.orders. Если владение таблицей будет передано пользователю abc, то таблицу будут теперь называть abc.orders.

Как объект получает его владельца? Это зависит от пользователя, который создал данный объект. Такая возможность имеется также у участника роли db_owner, который может создать объект, принадлежащий любому пользователю в базе данных. По умолчанию пользовательская учетная запись, которая создает объект (эта учетная запись должна иметь разрешение CREATE TABLE), будет также владеть объектом. Только учетные записи пользователя, принадлежащие роли db_owner могут создать объекты, принадлежащие dbo. Затем, при определенных обстоятельствах, владелец может даже перестать быть фактической учетной записью пользователя, но не dbo. Смотрите Understanding Object Ownership, где подробно обсуждается эта проблема.

Использование dbo в качестве владельца всех объектов базы данных может упростить управление объектами. Вы будете всегда иметь пользователя dbo в базе данных. Пользователи в базе данных будут в состоянии получить доступ к любому объекту, принадлежащему dbo, не уточняя владельца до тех пор, пока пользователь имеет соответствующие разрешения. Если объект принадлежит учетной записи, которая не является dbo, собственность необходимо передать другому пользователю, если исходная учетная запись должна быть удалена. Например, если не-dbo пользователь базы данных с именем "ted" создает таблицу sales, она будет называться ted.sales. Для других пользователей, за исключением Тэда, чтобы увидеть таблицу, следует использовать полностью квалифицированное имя. Если Тэд уходит из компании или отдела, и его учетная запись должна быть удалена из базы данных, владение этой таблицей должно быть передано учетной записи другого пользователя с помощью хранимой процедуры sp_changeobjectowner прежде, чем учетная запись Тэда может быть удалена.

Если таблица использовалась в приложениях или ссылки на нее имелись в каких-нибудь определениях, например, хранимых процедур, то изменение владельца нарушает весь код. Если бы dbo был владельцем таблицы изначально, то не было бы никакой проблемы при удалении учетной записи Тэда. Код тогда мог бы не использовать полностью квалифицированное имя, хотя и есть небольшой прирост производительности при использовании квалифицированных имен, что общепринято считается лучшим методом.

Схемы

Мне нравится думать о схемах как о контейнерах для размещения объектов. Если Вы посмотрите на учебную базу данных AdventureWorks (иллюстрация 1), то увидите, что таблицы распределены по разделам или функциям, например, "HumanResources" или "Production". Это напоминает прежнюю концепцию владельца, но имеет много преимуществ по сравнению с ней. Прежде всего, так как объекты не привязаны ни к каким учетным записям пользователя, Вы не должны беспокоиться об изменении владельца объектов при удалении учетных записей. Другое преимущество состоит в том, что схемы могут использоваться для упрощения управления разрешениями на таблицы и другие объекты. Схема имеет владельца, но владелец не привязан к названию. Поэтому, если учетная запись владеет схемой, и эта учетная запись должна быть удалена из базы данных, владелец схемы может быть изменен без изменения кода. Если Вы не желаете организовать объекты вашей базы данных в схемы, под руками всегда есть схема dbo.

Иллюстрация 1: Таблицы AdventureWorks со схемами.

Пусть, например, служащие в рамках отдела Widgets - члены одной сетевой группы безопасности WidgetEmp. Менеджеры каждого отдела - члены дополнительной группы, WidgetManagers. Мы создаем схему с именем Widgets, и много таблиц, представлений и хранимых процедур содержатся в схеме Widgets. Чтобы управлять доступом к объектам, мы могли бы добавить сетевые группы WidgetEmp и WidgetManagers в SQL Server и базу данных. Поскольку нас интересует управление доступом к таблицам, группе WidgetEmp дано разрешение execute (выполнение) на все хранимые процедуры в схеме Widgets. Группе WidgetManagers также дано разрешение select на все таблицы и представления. Главное здесь состоит в том, что Вам больше не нужно помнить о предоставлении разрешения всякий раз, когда создается новая хранимая процедура, таблица или представление, пока все это делается в схеме Widgets.

Чтобы предоставить разрешения на все хранимые процедуры в пределах схемы, выполните следующие действия:
· Используя SQL Server Management Studio, в браузере объектов разверните узел Security, а затем Schemas в ветке базы данных.
· Щелкните правой кнопкой мыши на имени схемы и выберите Properties.
· Выберите страницу разрешений (permissions), и щелкните Add, чтобы выбрать пользователей базы данных или роли.
· Как только пользователи или роли выбраны, список разрешений заполнит нижнюю область окна.
· Чтобы предоставить разрешение на выполнение всех хранимых процедур, поставьте флажок Grant рядом с пунктом Execute.

Я всегда хотел иметь роль базы данных с разрешениями на выполнение всех хранимых процедур. Что-то подобное роли db_datareader. Теперь Вы можете предоставить разрешение на выполнение всех хранимых процедур в пределах схемы, чтобы достичь желаемого результата (см. иллюстрацию 2). Я не знаю, почему не существует такой роли, но, по крайней мере, теперь есть простой способ сделать это. Даже если Вы не получаете выгоды из схем в вашей базе данных, Вы можете дать разрешение на выполнение хранимых процедур в схеме dbo, чтобы достичь того же самого результата.

Иллюстрация 2: Предоставление разрешений на выполнение всех хранимых процедур в схеме.

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

Модернизация вашей базы данных

Что случится, если вы переносите базу данных с SQL Server 2000 на 2005? При обновлении базы данных с 2000 на 2005, для каждого пользователя в базе данных создается схема. Вы можете даже не заметить этого, пока Вы не попытаетесь удалить одну из пользовательских учетных записей. Здесь Вы получите сообщение об ошибке: "The database principal owns a schema in the database, and cannot be removed" (руководитель базы данных владеет схемой в базе данных и не может быть удален). Чтобы разрешить эту проблему, сначала нужно лишь удалить схему, пока она пустая. Если схема не пуста, Вы должны будете решить, удалять ли сначала объекты или передать схему другому владельцу.

Заключение

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

05-10-2007

Полезная информация

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com
stumbleupon.com

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77[@]yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

В избранное