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

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


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

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

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

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

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

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


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

§ Оказывается наш сайт используется для локальных боев :-). Здесь соревнуются поляки.

§ Изменений в стане лидеров:
pvv перешел на этой неделе на третий этап и уже успел решить 2 задачи 3-го этапа - 139 и 142. Это позволило ему войти в 20-ку.
Snowbear решил 142 задачу; пока 19 место.

§ Одна задача до третьего этапа осталась Ant (задач 137, время 10.066)

§ Продвинулись в рейтинге:
raul (129, 17.709)
Donald (125, 5.949)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
Bulldozer (120, 194.947)
zjor (119, 86.838)
Чумазик (118, 54.004)
iglbeat (115, 17.299)
CasperGhost (114, 51.967)
nadush (114, 116.591)
Артём С. (110, 4.926)

§ На этой неделе сертифицированы:
Варенуха (A07021283) [BK] - г.Москва, Россия
Xadash (A07023077) [BK] - г.Ashkelon, Israel
serge77777 (A07022465) [BK] - г.Санкт-Петербург, Россия
eviSport (A07017027) [BK] - г.Орел, Россия
жизнь удалась (A07024046) [BK] - г.Пермь, Россия
Ant (B07016688) [AR] - г.Москва, Россия

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Белогурова К. (Katy_Ekb) 143 143 21 346 155 9.563 4.673 18 27 Oct 2007 11 Dec 2007
2 Креславский О.М. (Arcan) 143 143 21 346 269 17.514 7.720 18 26 Oct 2007 14 Dec 2007
3 Карасёва Н.В. (vlksm) 143 143 21 346 529 38.118 12.414 18 17 Oct 2007 14 Dec 2007
4 Голубин Р.С. (Roman S. Golubin) 143 143 21 346 795 69.101 43.885 18 22 Oct 2007 14 Dec 2007
5 Северюхин Ю.А. (Venser) 142 142 21 342 200 4.950 .655 14 19 Sep 2007 27 Nov 2007
6 Тарасов Д.Б. (Gavrila) 142 142 21 342 755 23.423 2.501 14 20 Sep 2007 14 Dec 2007
7 Солдатенков Ю.С. (SolYUtor) 142 142 21 342 490 17.853 2.695 14 20 Sep 2007 14 Dec 2007
8 Шептунов П.П. (Dzen) 142 142 21 342 279 8.186 3.499 14 02 Oct 2007 15 Nov 2007
9 Мурашкин И.В. (lepton) 142 142 21 342 544 15.800 5.539 14 18 Sep 2007 12 Dec 2007
10 Мальцев А.В. (Палкин) 142 142 21 342 422 49.738 7.690 14 13 Oct 2007 20 Nov 2007
11 Васьков Е.В. (Johan) 142 141 21 342 493 14.350 12.767 14 24 Nov 2007 30 Nov 2007
12 Бураков С.Г. (burakov58) 142 142 21 342 974 51.702 19.814 14 30 Sep 2007 09 Nov 2007
13 Агапов В. (KERBEROS) 135 141 20 326 89 6.143 1.262 11 20 Nov 2006 27 Jul 2007
14 Кувалкин К.С. (Cyrilus) 139 141 20 334 1014 12.506 2.519 11 04 Sep 2007 11 Dec 2007
15 Зверев Д.Л. (dimzv) 135 141 21 328 1469 9.278 4.938 11 12 Nov 2007 12 Nov 2007
16 Войнов П.Е. (pаparome) 141 142 21 338 765 2.788 .049 10 28 Sep 2007 30 Nov 2007
17 Любченко В.А. (IAS56) 141 142 21 338 377 177.859 20.130 10 16 Sep 2007 07 Dec 2007
18 Валуев Д.И. (Fiolent) 141 139 21 338 1547 122.201 66.360 10 29 Nov 2007 14 Dec 2007
19 Юлдашев М.Р. (Snowbear) 140 142 21 334 874 4.350 .188 6 09 Dec 2007 14 Dec 2007
20 Печатнов В.В. (pvv) 140 139 21 334 55 13.412 .558 6 13 Dec 2007 14 Dec 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Ким Н.М. (Natti) 51 51 100 32 132 831 11 Dec 2007
2 >Kwiatkowski (Aramaki) 48 48 94 0 94 1629 14 Dec 2007
3 >Publexus (Publexus) 43 56 93 0 93 1277 14 Dec 2007
4 Сотников А.А. (_Indi_) 39 39 69 17 86 1876 12 Dec 2007
5 >Козлов М.Ю. (baha) 42 42 78 0 78 2126 14 Dec 2007
6 Kolotnina A. (Kolotnina) 39 39 74 0 74 2294 11 Dec 2007
7 Musoyan V. (vahem) 15 35 38 34 72 1414 14 Dec 2007
8 Гринцевич М.В. (Antrisol) 35 35 67 0 67 2645 13 Dec 2007
9 Пруц К.С. (Newton) 31 31 57 9 66 2718 14 Dec 2007
10 Львова Л.В. (LyubovV) 24 50 52 9 61 1313 14 Dec 2007
11 >Синькевич П.В. (Чих) 26 39 61 0 61 2263 14 Dec 2007
12 >Шахов В.А. (robotodel) 32 32 60 0 60 3047 14 Dec 2007
13 Воронов В.Ю. (sqlnick) 28 28 51 9 60 3052 14 Dec 2007
14 Томихин А.В. (Captain) 25 39 59 0 59 2253 11 Dec 2007
15 Вялков (AndreyErr) 18 57 34 23 57 837 14 Dec 2007
16 >Смирина А. (fanya) 30 30 56 0 56 3361 14 Dec 2007
17 Шериев А.М. (Atreides) 15 67 31 23 54 482 13 Dec 2007
18 Савиных С.А. (Савиных) 25 25 43 11 54 3518 10 Dec 2007
19 >Карпович (МКМакс) 30 30 54 0 54 3532 14 Dec 2007
20 >Михайлов И.О. (WP*Uropb) 29 29 53 0 53 3664 14 Dec 2007
21 >Озиев М. (EXisTAnZ) 21 35 52 0 52 2609 14 Dec 2007
22 Архипов С.С. (sese) 27 27 47 3 50 3912 13 Dec 2007

Изучаем SQL

Проектирование базы данных: выбор первичного ключа

Mike (оригинал: Database Design: Choosing a Primary Key )
Перевод Моисеенко С.И.

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

Современные системы баз данных основываются на реляционной модели хранения и извлечения данных. Название происходит от слова relationship - отношение между столбцами в таблице (а не из того, что Вы можете связать таблицы между собой). Другими словами, "реляционный" означает, что несколько значений, которые принадлежат одной и той же строке, являются связанными.

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

Естественные Ключи

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

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

Есть множество желательных (не обязательно требуемых) характеристик первичного ключа, которых зачастую не имеют естественные идентификаторы:

· Уникальные значения: первичный ключ должен уникально идентифицировать каждую строку в таблице.

· Неинтеллектуальный: первичный ключ не должен иметь смыслового содержания. Другими словами, он не должен описывать характеристики сущности. Идентификатор клиента 398237 обычно более предпочтителен по сравнению с Майкл Дж. Малоун.

· Неизменяемость во времени: значение первичного ключа никогда не должно меняться. Изменение значения первичного ключа означает, что Вы меняете идентичность сущности, что не имеет смысла. Неинтеллектуальные ключи предпочтительны, поскольку они с меньшей вероятностью подвержены изменениям.

· Одноатрибутность: первичный ключ должен состоять из минимально возможного числа атрибутов. Желательно иметь одноатрибутные первичные ключи, поскольку с ними легче работать в приложениях, и они упрощают создание внешних ключей.

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

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

Суррогатные ключи

Когда естественный ключ не существует или когда естественный ключ неудобен, самое время рассмотреть вариант использования суррогатного ключа (называемого также синтетическим ключом) для уникальной идентификации объектов. Суррогатный первичный ключ - обычно числовой одноатрибутный ключ, который часто автоматически генерируется системой баз данных. Пока некоторые администраторы баз данных продолжают обсуждать правомерность их использования, суррогатные первичные ключи повсеместно используются на практике.

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

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

Заключение

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

14-08-2007

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

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

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

Контакты

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

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

В избранное