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

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


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

SQL Exercises

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

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

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

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

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


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

§ С помощью Davh уточнил английские формулировки задач 67 и 75.

§ Новые лица в сотне:
Madest (задач 120, время 41.478)

§ Продвинулись в рейтинге:
ValdemarES (137, 18.493)
Aladdin (135, 23.202)
yuriy.rozhok (129, 17.508)
Tunin (128, 36.150)
Lexus (125, 37.631)
SoVa (122, 157.373)

§ На этой неделе сертифицированы:
ChikinNV (A07014115) [BK] (г.Долгопрудный, МО, Россия)
Bolschakova (A07016706) [BK] (г.Чита, Россия)

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Северюхин Ю.А. (Venser) 142 142 21 341 36 4.912 .655 14 08 Apr 2007 04 May 2007
2 Солдатенков Ю.С. (SolYUtor) 142 142 21 341 320 17.807 2.695 14 03 Apr 2007 10 May 2007
3 Шептунов П.П. (PavelPS) 142 142 21 341 119 8.145 3.499 14 25 Apr 2007 11 May 2007
4 Мурашкин И.В. (lepton) 142 142 21 341 371 15.737 5.539 14 29 Mar 2007 09 May 2007
5 Карасёва Н.В. (vlksm) 142 142 21 341 328 31.344 5.912 14 30 Mar 2007 11 May 2007
6 Голубин Р.С. (Roman S. Golubin) 142 142 21 341 588 55.391 34.203 14 29 Mar 2007 11 May 2007
7 Агапов В. (KERBEROS) 138 141 20 330 89 6.163 1.262 11 20 Nov 2006 09 Apr 2007
8 Кувалкин К.С. (Cyrilus) 140 141 20 334 867 12.518 2.519 11 10 Apr 2007 10 May 2007
9 Зверев Д.Л. (dimzv) 138 141 20 330 1141 9.294 4.938 11 19 Dec 2006 22 Dec 2006
10 Войнов П.Е. (pаparome) 141 142 21 337 616 2.765 .049 10 02 May 2007 11 May 2007
11 Тарасов Д.Б. (Gavrila) 138 140 21 330 577 20.220 .513 7 26 Mar 2007 11 May 2007
12 Мальцев А.В. (Палкин) 140 141 21 334 224 27.657 7.373 7 29 Mar 2007 07 May 2007
13 Васьков Е.В. (Johan) 140 140 21 334 253 12.786 11.402 7 29 Mar 2007 09 Apr 2007
14 Валуев Д.И. (Fiolent) 139 140 20 329 1329 117.088 62.302 4 25 Apr 2007 11 May 2007
15 Юлдашев М.Р. (Snowbear) 139 139 21 330 642 4.132 .000 3 21 Apr 2007 11 May 2007
16 Креславский О.М. (Arcan) 139 139 21 330 67 9.932 .315 3 07 Apr 2007 11 May 2007
17 Держальцев В.А. (MadVet) 135 139 20 321 540 34.190 3.085 3 08 Oct 2006 19 Oct 2006
18 Палий С.А. (PS_Sergey) 136 139 20 322 212 15.704 4.188 3 01 Dec 2006 03 Dec 2006
19 Солопов А.Н. (15th) 138 138 21 327 125 16.082 .000 0 25 Apr 2007 11 May 2007
20 Бородкина М.И. (marishkin) 138 138 21 327 145 19.015 .000 0 10 Apr 2007 03 May 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Титов Д.Ю. (Dragon999) 54 54 103 23 126 767 11 May 2007
2 >bel (mb__) 52 52 99 8 107 1048 11 May 2007
3 Кульмаметова З.Т. (Sulfiya) 51 51 94 11 105 1086 07 May 2007
4 Измайлова З. (zulia) 51 51 94 11 105 1087 07 May 2007
5 Малов В.В. (Вовик) 46 52 91 11 102 1026 07 May 2007
6 Нигматулин (Djin13) 48 48 89 11 100 1231 07 May 2007
7 гусева М.Ю. (гусева) 48 48 88 9 97 1322 07 May 2007
8 зыкина О. (зыкина) 47 47 86 9 95 1385 07 May 2007
9 rizaeva (rizaeva) 50 50 92 0 92 1438 09 May 2007
10 Пьянков С.В. (milo) 32 47 70 9 79 1360 07 May 2007
11 >Заббарова (Guzel) 40 40 75 0 75 1862 11 May 2007
12 >Одегов А.В. (avode) 18 62 35 34 69 477 11 May 2007
13 Чернов Д.И. (Dimbuch) 32 32 59 9 68 2142 11 May 2007
14 Петряков Н. (s0n1k) 25 52 51 11 62 1020 07 May 2007
15 >Шаркеев В.И. (vishark) 37 37 61 1 62 2385 11 May 2007
16 >Альбрант А.И. (AlanDragon) 24 57 48 11 59 869 11 May 2007
17 Mugiwara (Mugiwara) 22 55 46 11 57 835 10 May 2007
18 >Kazantsev K. (Bender_1982) 31 36 56 0 56 2452 11 May 2007
19 Балыков Д.И. (balykoff) 30 30 55 0 55 2808 08 May 2007
20 aripova L.M. (cr-girl) 22 50 43 11 54 1148 09 May 2007
21 Janovsky J. (Juvadi) 27 43 54 0 54 1969 08 May 2007
22 >Лукашов В.В. (Victor V. Lukashov) 29 29 52 0 52 3003 11 May 2007
23 >horodecki (qba) 28 28 49 3 52 3005 11 May 2007
24 Филатова Н. (filatova1987) 21 50 40 11 51 1146 07 May 2007
25 Арасланов Е.И. (Рыжий) 20 52 50 0 50 1025 07 May 2007
26 Mishakov K. (Snusmumris) 22 32 49 0 49 2563 10 May 2007
27 >Будник Д.И. (demoss) 28 28 49 0 49 3206 11 May 2007
28 >Lee D.H. (Beaner) 30 30 44 3 47 3393 11 May 2007
29 Глазман А.В. (Malish) 16 55 31 14 45 726 10 May 2007
30 Чаниев (Мурад) 15 64 28 15 43 575 11 May 2007
31 >Умнов И.А. (vanezy) 17 32 42 0 42 2574 11 May 2007
32 Копылов Н.В. (NIKOP) 4 57 7 34 41 522 10 May 2007
33 Бондаренко Р.А. (roman_777) 14 43 26 14 40 1325 11 May 2007

Изучаем SQL

Десять характерных ошибок в проектировании базы данных (продолжение, начало в вып.138)

Louis Davidson (оригинал: Ten Common Database Design Mistakes )
Перевод Моисеенко С.И.

Слабые стандарты именования

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

Эта цитата из Ромео и Джульетты Уильяма Шекспира звучит прекрасно и справедлива, с одной стороны. Если мы теперь согласимся назвать розу экскрементами, то ничего не изменится, и она будет пахнуть так же сладко. Проблема же состоит в том, что если, строя базу данных для цветочного бизнеса, проектировщик называет ее экскрементами, а клиент - розой, тогда Вам предстоят встречи, которые значительно больше походят на миниатюру Эббота и Костелло (комедийный дуэт), чем на серьезную беседу относительно хранении информации о продуктах садоводства.

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

Рассмотрим, например, столбец с именем X304_DSCR. Что это может означать? Вы могли бы после некоторого умственного напряжения решить, что это означает "описание X304"(description). Возможно это и так, но DSCR может означать и дискриминатор, и дискретизатор?

Если Вы не установили DSCR как корпоративное стандартное сокращение для "описания", тогда X304_DESCRIPTION - намного лучшее название, и не оставляет простора воображению.

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

По этим тем же самым соображениям, противьтесь искушению использовать "метаданные" в качестве имени объекта. Имена типа tblCustomer или colVarcharAddress могут показаться полезными с точки зрения разработки, однако конечного пользователя они могут только запутать. Как разработчик, Вы должны основываться на том, что в состоянии определить, что имя таблицы - это имя таблицы по контексту кода или инструмента, и предоставить пользователям ясные, простые и информативные имена типа Customer (клиент) и Address (адрес).

Практика, против которой я постоянно выступаю, - это использование пробелов и закавыченных идентификаторов в именах объектов. Вам следует избегать таких имен столбцов, как " Part Number" или - в стиле Microsoft - [Part Number], и, следовательно, требуя, чтобы Ваши пользователи также включали такие пробелы и идентификаторы в собственные коды. Это раздражает и просто не нужно.

Приемлемыми альтернативами были бы part_number, partNumber или PartNumber. Опять же, ключевым здесь является последовательность. Если Вы выбираете PartNumber, это прекрасно, если столбец, содержащий номера счетов, называют InvoiceNumber, но не одним из других возможных вариантов.

Отсутствие документации

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

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

Замечание:
То, где эта документация сохраняется, в значительной степени дело корпоративных стандартов и/или удобства разработчиков и конечных пользователей. Можно сохранять эти определения непосредственно в базе данных, используя расширенные свойства. Альтернативным решением могут быть поддерживаемые инструменты моделирования данных. Можно даже хранить информацию в отдельных хранилищах данных типа Excel или другой реляционной базе данных. Моя компания поддерживает базу данных репозитория метаданных, которую мы разработали для представления этих данных конечным пользователям в доступном для поиска и пригодном для редактирования формате. Формат, удобство и простота использования важны, но первичная цель - иметь информацию доступной и в актуальном состоянии.

Ваша цель должна состоять в том, чтобы обеспечить достаточно информации, зато тогда, когда Вы передадите базу данных программисту поддержки, он может выявить ваши незначительные ошибки и устранить их (да, все мы делаем ошибки в нашем коде!). Я вспоминаю старую шутку о том, что плохо документированный код - синоним "обеспеченности работой." Хотя в этом есть доля истины, это путь к ненависти со стороны сотрудников и помеха в продвижения по службе. И никакой хороший программист из тех, кого я знаю, не захочет вернуться к переделке своих собственных кодов годы спустя. Лучше всего, если ошибки в коде сможет устранить младший программист поддержки, в то время как Вы создаете следующую новую вещь. Обеспеченность работой наряду с карьерным ростом будет достигнута, если постоянно принимать новые вызовы.

(продолжение следует...)

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

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

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

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

Контакты

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

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

В избранное