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

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


Информационный Канал Subscribe.Ru

Новости сайта "Упражнения по SQL" Выпуск 10 (21 ноября 2004 г.)

http://www.sql-ex.ru

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

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

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


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

§ Добавлены данные для проверки задачи #79, моделирующие ситуацию, описанную grey_rat и hamlet. Многие решения перестанут проходить. Просьба проверить. Не помешает проверка и других решений по этой схеме. :-)

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

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

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

No Surname Number of
Sel_ex
Number of
DML_ex
Scores Days Days_2 Last_Solved Last_Visit
1 Зверев Д.Л. (dimzv) 136 17 274 252.92 2.219 14 Jul 2004 14 Jul 2004
2 Иткин И.Л. (joseph_itkin) 136 17 274 245.84 2.792 29 Oct 2004 19 Nov 2004
3 Якутин Н.В. (ZrenBy) 136 6 274 428.80 3.993 24 Jun 2004 16 Nov 2004
4 Леденев С.А. (Shurgenz) 136 17 274 60.94 8.315 18 Oct 2004 19 Nov 2004
5 Михайлов В.Г. (mslava) 136 17 274 498.01 9.734 26 Oct 2004 26 Oct 2004
6 Spirin (spirin) 136 17 274 44.06 13.429 29 Sep 2004 29 Sep 2004
7 Валуев Д.И. (Fiolent) 136 17 274 293.15 19.314 23 Jun 2004 19 Nov 2004
8 Мельникова И.А. (Iris_m) 136 17 274 141.12 65.651 30 Sep 2004 18 Nov 2004
9 Карабанов А. (gipa) 133 0 268 138.58 5.022 10 Jul 2004 10 Jul 2004
10 Новиков Д.А. (DimaN) 130 0 264 68.17 2.104 01 Mar 2004 01 Mar 2004
11 Драконов Ф.А. (f_d) 130 0 264 36.32 7.243 03 Jun 2004 11 Nov 2004
12 Пятница О.А. (Robin) 128 17 259 589.55 70.834 06 Oct 2004 06 Oct 2004
13 Губарь Д.К. (DEathkNIghtS) 124 17 251 22.67 1.048 03 Nov 2004 03 Nov 2004
14 Смирнов А. (Leshich) 124 17 251 147.15 84.180 03 Aug 2004 19 Nov 2004
15 Ганя А.Д. (Sandman25) 123 1 248 154.83 3.130 16 Jun 2004 16 Jun 2004
16 Сныткин В.Л. (vlad_snt) 122 17 247 78.04 4.412 19 Nov 2004 19 Nov 2004
17 Шулакова Н. (nshu) 121 0 244 81.03 5.468 28 Feb 2004 28 Feb 2004
18 сафрошкин В.Ю. (safervas) 121 14 244 95.25 73.107 19 Nov 2004 19 Nov 2004
19 Митронин А.А. (mitronin) 120 9 241 405.96 2.150 09 Aug 2004 09 Aug 2004
20 Муравейко О.Ю. (Aaz) 120 4 241 134.65 5.720 07 Mar 2004 12 Nov 2004


 

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 кривенко С.А. (Sky) 56 56 93 9 102 251 19 Nov 2004
2 Слабнов С.А. (nwton) 54 54 90 9 99 268 18 Nov 2004
3 Маслов И.В. (lokki) 50 50 83 9 92 305 20 Nov 2004
4 Устинов Н.В. (newf) 38 38 68 0 68 378 20 Nov 2004
5 Илюшина А. (Ilyushina) 37 48 59 0 59 332 19 Nov 2004
6 Uferov A. (uferov) 31 31 56 0 56 472 19 Nov 2004
7 Черноусов С.А. (Cesa) 28 28 49 0 49 526 20 Nov 2004
8 Кубович (Sakateka) 21 66 43 0 43 112 20 Nov 2004
9 Телицын М.В. (Sam) 20 43 36 0 36 368 17 Nov 2004
10 Порутчиков К.В. (3ABXO3) 15 37 35 0 35 392 20 Nov 2004
11 воинова (Udiff) 23 23 34 1 35 740 19 Nov 2004
12 Алексеенко А.А. (LAlex) 23 23 34 0 34 710 16 Nov 2004
13 Hakobyan H.H. (hamlet) 9 87 18 15 33 60 19 Nov 2004
14 filatova H. (HelenFilatova) 3 97 6 26 32 41 18 Nov 2004
15 >Котельников А.А. (Lames) 21 21 29 0 29 866 21 Nov 2004
16 Мостайкина М.Ю. (Lady) 16 44 28 0 28 329 19 Nov 2004
17 >Paskha (paskha) 15 39 26 0 26 443 21 Nov 2004
18 Bobrov S. (overseer) 3 62 8 17 25 223 18 Nov 2004
19 Кузнецова А.А. (Nefertary) 19 19 25 0 25 925 19 Nov 2004
20 Маркевич А.С. (to_alex@ngs.ru) 18 18 23 0 23 952 19 Nov 2004
21 Лесихин А.С. (tempus) 12 33 22 0 22 510 18 Nov 2004
22 Bolschakoff (Bolschakoff) 2 65 6 15 21 125 19 Nov 2004
23 sirin (sirin) 10 29 21 0 21 583 20 Nov 2004
24 moroz V.S. (val_de_mar) 17 17 21 0 21 999 20 Nov 2004
25 Иванов Д. (Figo) 9 64 20 0 20 130 16 Nov 2004

Изучаем SQL

Апология NULL-значений

Смысл NULL-значения - отсутствие информации или неприменимость данного атрибута в данном кортеже.

Можно спросить: "Зачем иметь атрибут, если его значение неприменимо?". Ответ на этот вопрос лежит в области моделирования предметной области. Рассмотрим, например, схему БД "Компьютеры". Она представляет собой реляционную модель связи "тип-супертип". Сущностями предметной области здесь являются модели компьютерной продукции (супертип), при этом каждый тип продукции (ПК, ПК-блокнот или принтер) отображается в отдельную таблицу со связями "многие к одному" с таблицей Product.

Такая модель обеспечивает высокую степень нормализации (3НФ). Однако это не единственный способ. Можно было бы хранить всю информацию в одной таблице, которая содержала бы как общие для всех моделей атрибуты (например, цена - price), так и атрибуты, которые имеют смысл только для моделей определенного типа (например, цвет - color - для характеристики принтеров). Для такой схемы NULL-значение является вполне оправданным именно в смысле неприменимости характеристики, т.е. NULL в столбце color , будет говорить о том, что эта характеристика не имеет отношения, скажем, к моделям ПК.

Вернемся теперь ко второй ипостаси NULL-значений - отсутствию информации. Если мы решим отказаться от использования NULL-значений, то должны предложить альтернативу. Естественным путем является использование значения по умолчанию, которое будет подставлено в соответствующий столбец при отсутствии информации. Следует заметить, что таких значений по умолчанию должно быть, по меньшей мере, столько, сколько различных типов данных поддерживается СУБД (целые, строки, дата-время, …).

Рассмотрим, например, таблицу Laptop и поле price (цена). Пусть предметная область такова, что на момент ввода информации о моделях ПК-блокнотов их цена не всегда известна. При выборе значения по умолчанию мы должны ограничиться только значениями, допустимыми для поля price. Тип данных для столбца (money) заставляет нас ограничиться только числовыми значениями, совместимыми с данным типом и доменными ограничениями (ограничение типа CHECK), наложенными на допустимые значения для этого столбца. Любое положительное значение в качестве значения по умолчанию будет вызывать путаницу, т.к. невозможно будет отличить "истинное" значение цены от заменителя отсутствующей цены. Поэтому следует выбрать нуль или любое отрицательное значение. А теперь поговорим о том, чем плоха такая замена.

Для примера рассмотрим информацию о моделях 1298, имеющихся в таблице Laptop. Чтобы познакомиться с данными, выполним запрос:

SELECT * FROM laptop WHERE model=1298

Вот результаты выполнения этого запроса:

code model speed ram hd price screen
1 1298 350 32 4 700.0 11
4 1298 600 64 10 1050.0 15
6 1298 450 64 10 950.0 12

Рассмотрим задачу получения средней цены модели 1298. Пока все цены известны решение этой задачи не вызывает никаких сомнений:

SELECT model, AVG(price) avg_price
    FROM laptop
    WHERE model=1298
    GROUP BY model
model avg_price
1298 900.0

Пусть теперь цена модели с кодом 4 неизвестна. Если, как было решено ранее, мы будем заменять неизвестное значение, скажем, нулем (UPDATE laptop SET price=0 WHERE code=4), то получим заведомо неверное среднее значение цены - 550.0

Если же мы будем использовать NULL-значение, то результат будет вполне правильным - 825.0, т.к. NULL-значения будут игнорироваться при группировке, в результате чего среднее значение будет вычисляться только по моделям с известной ценой (т.е. среднее по двум моделям).

Итак, как я постарался показать, NULL-значение является неотъемлемой особенностью реляционной модели, и вместо критики предлагаю научиться корректно работать с такими значениями.

§ Приведенные здесь примеры можно выполнить непосредственно на сайте, установив флажок "Без проверки" на странице с упражнениями на SELECT.


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

§ Мы готовы разместить на сайте оригинальные статьи по SQL и СУБД. Так что пишите.

Контакты

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

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

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.db.sqlex
Отписаться

В избранное