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

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


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 98 (29 июля 2006 г.)

http://www.sql-ex.ru

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

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

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

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

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


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

§ Выставлена еще одна новая задача - 92-я. Сложность 2 балла, автор - paparome. Будут еще на всех этапах :-). Еще не все лидеры решили 2 добавленные за последнее время задачи, что внесло изменение в TOP 10. Помимо некоторых перестановок, появилось новое лицо (на мой взгляд, вполне заслуженно) - vlksm (задач 137,время 22.534). Вернулся в десятку и наш модератор Fiolent (137, 49.244).

§ Новый человек появился и в сотне - alex_v (110, 9.261). Сотня уплотняется, и я уже подумываю о том, чтобы анализировать шансы претендентов.

§ Сохранили шансы попасть в ТОР 10:
Dizil (136, 3.829)
=Maxim= (121, 12.031)

§ Продолжили свое восхождение к вершине:
ba (122, 41.175)
FanOfBeer (121, 78.537)
T! (115, 45.140)
Ocean (109, 28.059)

§ На этой неделе сертифицированы:
зфмуд1973 (A06006755) [BK] (г.Аксу, Казахстан)
FanOfBeer (B06008465) [AR] (ст.Выселки, Краснодарский край, Россия )
Vaganov (A06011298) [BK] (г.Новороссийск, Россия)
pаparome (B06006028) [AR] (г.Москва, Россия )

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Войнов П.Е. (pаparome) 138 138 20 322 336 2.680 26 Jul 2006 28 Jul 2006
2 >Мурашкин И.В. (lepton) 138 138 20 322 127 10.134 28 Jul 2006 28 Jul 2006
3 Голубин Р.С. (Roman S. Golubin) 138 138 20 322 342 21.138 26 Jul 2006 28 Jul 2006
4 Юлдашев М.Р. (Snowbear) 137 138 20 320 361 4.036 14 Jul 2006 28 Jul 2006
5 Кувалкин К.С. (Cyrilus) 137 138 20 320 610 9.768 27 Jul 2006 28 Jul 2006
6 Валуев Д.И. (Fiolent) 137 138 20 320 1057 49.244 27 Jul 2006 28 Jul 2006
7 Карасёва Н.В. (vlksm) 137 137 20 318 81 22.534 26 Jul 2006 28 Jul 2006
8 Slobodcicov A.N. (Testo) 136 138 20 317 252 6.707 01 Jun 2006 18 Jul 2006
9 Kamaev V.M. (Heromantor) 136 138 20 317 128 9.044 14 Mar 2006 25 Mar 2006
10 Бураков С.Г. (burakov58) 136 138 20 317 419 17.381 24 Mar 2006 07 Apr 2006
11 Иванов А.Н. (Goapsy) 136 138 20 317 211 18.221 09 Jun 2006 09 Jun 2006
12 Тарасов Д.Б. (Gavrila) 136 138 20 317 208 19.382 22 Mar 2006 28 Jul 2006
13 Абашин П.И. (Dizil) 136 137 20 316 335 3.829 25 Jul 2006 28 Jul 2006
14 Самохвалов В. (ValdemarES) 136 137 20 316 244 7.806 19 Jul 2006 21 Jul 2006
15 frenkental (a2010) 136 137 20 316 110 15.332 19 Jul 2006 26 Jul 2006
16 Зверев Д.Л. (dimzv) 135 137 20 313 869 3.272 22 Mar 2006 08 Jul 2006
17 Носков Н.В. (niko2) 135 137 20 313 274 8.452 06 Apr 2006 16 May 2006
18 Крижевич С.А. (yaff) 135 137 20 313 259 14.792 16 Mar 2006 05 May 2006
19 Держальцев В.А. (MadVet) 135 137 20 313 357 18.614 08 Apr 2006 08 Jul 2006
20 Зырин В.Е. (Vezyr) 135 137 20 313 63 20.590 17 Mar 2006 20 Jul 2006

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Павлов (JN) 48 48 82 17 99 857 28 Jul 2006
2 >Lichota L. (Seeker) 31 58 66 31 97 342 28 Jul 2006
3 >Блутштейн В.Г. (Вадим) 45 45 76 19 95 908 28 Jul 2006
4 >Вербицкий Д.В. (Dmitry74) 46 46 77 11 88 1005 28 Jul 2006
5 Чудов (M_mpx) 49 49 84 3 87 1022 27 Jul 2006
6 >Fisher A.N. (xsect) 43 43 76 3 79 1167 28 Jul 2006
7 >vvvv V.V. (vvvvvvvvvvv) 43 43 70 9 79 1168 28 Jul 2006
8 Тарабанько Ю.В. (Yorik) 44 44 75 3 78 1191 26 Jul 2006
9 >Бурдак А. (goretex) 29 29 52 23 75 1262 28 Jul 2006
10 Litvinova S. (Sverchik) 44 44 72 0 72 1348 28 Jul 2006
11 >Васьков Е.В. (Johan) 25 79 53 13 66 181 28 Jul 2006
12 Ковалев В.А. (WaR_RioR) 36 36 65 1 66 1475 28 Jul 2006
13 >savitsky (Sav007) 35 35 62 3 65 1496 28 Jul 2006
14 >Самойлов К. (aka_CoBra) 36 36 65 0 65 1502 28 Jul 2006
15 >Ushanov M. (Mikaelo) 36 36 65 0 65 1504 28 Jul 2006
16 >Колосков А.А. (троль) 25 66 48 15 63 259 28 Jul 2006
17 >Пугина М.В. (marinap) 24 54 53 0 53 844 28 Jul 2006
18 >Burcev D.V. (FoxJr) 23 40 50 3 53 1292 28 Jul 2006
19 Woo M. (Totti) 30 30 44 8 52 1924 28 Jul 2006
20 AntonXT (AntonT) 28 28 49 1 50 1991 27 Jul 2006
21 >Половинкин Д.Г. (grinpic) 28 28 49 0 49 2040 28 Jul 2006
22 Sologub V.L. (sologub) 24 24 37 9 46 2157 27 Jul 2006
23 >HAKEROV S. (ASKET) 24 30 45 0 45 1973 28 Jul 2006
24 >Королев (sk) 32 32 41 3 44 2234 28 Jul 2006
25 >Гридин Н.А. (Nik_Gridin) 26 26 43 0 43 2277 28 Jul 2006
26 Сафрыгина И. (JustNick) 20 40 41 0 41 1437 28 Jul 2006
27 >vimal (vimsql) 29 30 37 4 41 2134 28 Jul 2006
28 Мов (crt) 20 28 40 0 40 2065 27 Jul 2006

Изучаем SQL

Безумие справочных таблиц (окончание, начало в вып.97)

Don Peterson (оригинал: Lookup Table Madness)
Перевод Моисеенко С.И.

Рассуждение, которое приводит к таблицам MUCK, если взять его логическое заключение, должно сводить или "обобщать" каждую сущность в базе данных к "Вещи" (Thing). Таблица Thing имела бы ключ (им, естественно, будет столбец IDENTITY), и несколько других обобщенных атрибутов типа Name (название), Type (тип) и description (описание) и т.д ...:

CREATE TABLE Thing (
     PKey bigint IDENTITY(1,1) --Лучше использовать bigint, поскольку ожидается
            --множество строк в этой детке...
     , ThingType int
     , Attribute1 varchar(8000)
         -- Мы не можем обеспечить никакой целостности домена, поэтому
        -- должны смириться с тем, что я называю подходом "кучи мусора".
     , Attribute1Type int
     , Attribute2 varchar(8000)
     , Attribute2Type int
     , и т.д....)

Поздравляю вас, теперь мы разработали прямой путь обратно к управлению данными в электронной таблице, хотя и с одним удобством в виде языка запросов. О, постойте..., было бы еще лучше использовать столбец IDENTITY и строку XML, это способ, при которым нам не понадобится определять в БД более одной таблицы с двумя столбцами, и мы вообще не будем беспокоиться о такой вещи как целостность данных; "не лучше ли вести всю обработку средствами приложения?" Теперь это то, что я называю гибким проектом базы данных! (OK, прошу прощения за сарказм, это для тех, кто не подумал: "Да! Можно сэкономить время и прекратить читать".) Да, я лично имел дело с людьми, которые думали, что такие варианты не только жизнеспособны, но и предпочтительней нормализованной базы данных.

Кое-кто скажет, что эти примеры неправдоподобны, и что никакой разумный человек не пошел бы так далеко. Но где точно находится граница, когда Вы знаете, что зашли слишком далеко? Когда Вы отказываетесь от фундаментальных принципов, на которых основан хороший проект базы данных, какие принципы Вы используете для приложения ваши сил? Различие между MUCK и таблицей "Thing" одного порядка, не по виду, а по тому, что обе они неправильны. Теперь, прежде чем Вы скажите, что "нет никакого 'правильного' способа спроектировать базу данных"; правдой является то, что заданный ряд довольно сложных требований, два компетентных человека могли бы реализовать, на первый взгляд, в различных проектах базы данных, но будьте уверены, что разнообразие неправильных проектов, в которых неосведомленность видна повсюду, фактически безгранично!

Обобщение - хорошая вещь в правильном контексте, но это - инструмент, и он не должен использоваться без разбора. Обобщение может оказаться очень полезным в мире объектно-ориентированного (OO) программирования, где Вы сосредоточены на том, что вещи делают или как они действуют. Если две вещи действуют одним и тем же способом, они могут быть объединены в едином классе. Даже если они значительно отличаются, они могли бы унаследовать их общие характеристики от родительского класса, опираясь на подклассы, чтобы обеспечить их уникальное поведение. В мире проектирования реляционных баз данных мы, действительно, не заботимся сильно о том, как вещи действуют, мы заботимся о том, каковы они есть. В этом контексте, обобщение очень редко оказывается полезным. В мире OO программирования обобщение позволяет улучшить повторное использование кода, модульность, и возможность поддержки. Напротив, обобщение в базе данных приводит к двусмысленности, или потере смысла. Я подозреваю, что эта практика приобрела свое начало от тех OO программистов, которые по ошибке думают, что таблица является аналогом класса, когда в действительности таблица - это переменная. Проницательные читатели распознают эту ошибку, которую Дейт назвал "Первой Большой Грубой Ошибкой", но это еще одна тема для другого времени...

Будьте осмотрительны, чтобы не обобщить вашу базу данных до крайности, встраивая в нее такую большую гибкость, что ваша система превратится в хаос (хаос, как предел гибкости). Помните, что основным мотивом использования базы данных является не "сохранение данных"; это может быть сделано более эффективно системами на основе файлов. Назначение реляционной базы данных состоит в том, чтобы предписать правила, которые управляют созданием, поддержанием и использованием данных; другими словами, база данных предписывает правила, которые придают данным смысл. Без этих правил ваши данные становятся бессмысленным нагромождением единиц и нулей. В проекте базы данных, прежде всего, должна рассматриваться логическая непротиворечивость; все остальные вопросы вторичны. В конце концов, что именно является базой данных? Хью Дарвен (Hugh Darwen ) предложил наиболее полезное определение базы данных из всех, которые я встречал:

"База данных - это ряд аксиом. Ответ на запрос - это теорема. Процесс получения теоремы из аксиом - это доказательство. Доказательство строится посредством манипуляции символами согласно принятым математическим правилам. Доказательство (то есть результат запроса) так же непротиворечиво, как и правило."

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

24/03/2006

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

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

§ Поступила в продажу книга SQL. Задачи и решения, посвященная анализу ошибок, допускаемых при решении задач первого этапа. На сайте издательства Питер можно сделать заказ и познакомиться с содержанием.

Контакты

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

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

В избранное