Файл: Проектирование БД для контроля сессионной успеваемости студентов ВУЗа.pdf
Добавлен: 29.03.2023
Просмотров: 272
Скачиваний: 4
Нормализация отношений позволяет сократить дублирование данных, но платить за это приходится появлением новых отношений, что приводит к проблеме поддержки семантической целостности данных. Поэтому на практике как правило проводят нормализацию до третьей нормальной формы.
1.2 Язык управления реляционными базами данных
Появление языка SQL связанно с необходимостью проверки, разработанной доктором Е.Ф. Коддом реляционной модели базы данных. Для этого компания IBM организовала исследовательский проект - System/R. Целями данного проекта были: разработка реляционной СУБД, а также разработка простого языка для получения и управления данными, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования [5, с.4].
В рамках данного проекта разрабатывались и опробовались разные языки запросов, один из которых получил название SEQUEL (Structured English Query Language — «структурированный английский язык запросов»). Позже язык SEQUEL по юридическим соображениям был переименован в SQL.
В дальнейшем языка SQL вследствие постоянно увеличивавшейся роли реляционных баз данных развивался и совершенствовался и в настоящее время представляет собой мощный инструмент манипулирования не только данными, но и базами данных в целом.
С момента появления и до настоящего времени язык SQL прошел длинный путь развития, сохранив свою идеологию неизменной благодаря процессу стандартизации проходившему постоянно.
Работа над официальным стандартом языка SQL началась в 1982 году [14] в рамках комитета ANSI. В 1986 году был утвержден первый вариант стандарта ANSI, а в 1987 году этот стандарт был утвержден и ISO.
В 1989 году стандарт претерпел незначительные изменения, но именно этот вариант получил название SQL-1 или SQL-89. За время разработки стандарта (1982–1989 гг.) были созданы, представлены на рынке и активно использовались несколько различных СУБД, в которых в том или ином виде был реализован некоторый диалект языка SQL. [5, 14].
Следующая реализация стандарта была призвана решить эту проблему. В результате длительных обсуждений и согласований в 1992 году был принят новый стандарт ANSI SQL-92 (SQL-2). В данном стандарте были впервые введены уровни соответствия стандарту, что породило в свою очередь множество диалектов языка используемых в различных СУБД.
Работа над стандартизацией продолжалась и далее. Появился стандарт SQL-1999 или SQL3. Вторая часть носит название SQL/Foundation и является основой стандарта. Вводится система типов языка, формулируются правила определения функциональных зависимостей и возможных ключей, определяются синтаксис и семантика основных операторов SQL. Третью часть занимает уточненная по сравнению с SQL-92 спецификация SQL/CLI. В четвертой части специфицируется SQL/PSM - синтаксис и семантика языка определения хранимых процедур (стандарт синтаксиса триггеров и процедур). Наконец, в пятой части - SQL/Bindings - определяются правила связывания SQL для стандартных версий языков программирования FORTRAN, COBOL, PL/1, Pascal, Ada, C и MUMPS.
2003 год ознаменовался появлением стандарта SQL-2003, в котором были введены расширения для работы с XML-данными, оконные функции (применяемые для работы с OLAP-базами данных), генераторы последовательностей и основанные на них типы данных.
Стандарт SQL-2006 вышедшей в 2006 году увеличивал функциональность работы с XML-данными. Появилась возможность совместно использовать в запросах SQL и XQuery.
SQL-2008 Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL-2003
Благодаря наличию стандарта все современные СУБД одинаково поддерживают один из четырех уровней соответствия стандарту языка SQL. Тем самым достигается минимизация различий в диалектах, существующих СУБД и повышается степень переносимости конкретной модели базы данных. И, тем не менее, каждая СУБД по-прежнему поддерживает свой диалект языка.
Каждый язык программирования состоит из двух основных частей:
- алфавитом - набором букв, допустимых к использованию;
- синтаксисом - набором правил, по которым эти символы следует записывать.
Большинство таких языков в качестве алфавита используют латинский алфавит, дополненный арабскими цифрами и различного рода специальных символов вроде скобок, знаков арифметических операций, запятых, и тд.
Наиболее общим в синтаксисах языков программирования является выделение среди всех лексем (минимальных единиц языка, имеющих самостоятельный смысл) служебных (зарезервированных) слов и правила записи операторов - "предложений" из лексем [27].
Язык, в терминах которого дается описание языка SQL, называется метаязыком. Синтаксические определения обычно задают с помощью специальной металингвистической символики, называемой Бэкуса-Науэра формулами (БНФ) [28].
Зарезервированные слова являются постоянной частью языка SQL и имеют фиксированное значение. Слова в операторе размещаются также в соответствии с установленными синтаксическими правилами.
Идентификаторы языка SQL предназначены для обозначения объектов в базе данных и являются именами таблиц, представлений, столбцов и других объектов базы данных. Символы, которые могут использоваться в создаваемых пользователем идентификаторах языка SQL, должны быть определены как набор символов.
В языке SQL принято выделять следующие два вида лексем. Лексемы, предназначенные для описания типов данных. Лексемы для описания действий над объектами баз данных (операторов).
При этом большинство операторов языка имеют свою собственную структуру (правила записи) немного отличные от других.
Как правило, разработчики, как игнорировали, так и игнорируют некоторые положения стандарта, с одной стороны, отказываясь реализовывать некоторые его части, а, с другой стороны, реализуя то, что отсутствует в стандарте.
Благодаря наличию стандарта все современные СУБД одинаково поддерживают один из четырех уровней соответствия стандарту языка SQL. Тем самым достигается минимизация различий в диалектах, существующих СУБД и повышается степень переносимости конкретной модели базы данных. И, тем не менее, каждая СУБД по-прежнему поддерживает свой диалект языка.
Каждая из реализаций языка SQL в конкретной СУБД называется диалектом. Функции, которые добавляются к стандарту языка разработчиками коммерческих реализаций, принято называть расширениями. Например, в стандарте языка SQL определены конкретные типы данных, которые могут храниться в базах данных. Во многих реализациях этот список расширяется за счет разнообразных дополнений.
В настоящее время СУБД используются следующие основные диалекты языка SQL:
- PL/SQL используется в СУБД Oracle, InterBase/Firebird;
- Transact-SQL реализован в СУБД Microsoft SQL, Sybase ASE;
- Informix-SQL в СУБД Informix;
- Jet SQL в Microsoft Access;
- PL/pgSQL в СУБД PostgreSQL.
Подводя итог можно отметить, что в процессе анализа вышеизложенной информации выявлены следующие недостатки рассмотренной модели баз данных:
- так как все поля одной таблицы должны содержать постоянное число полей заранее определенных типов, приходится создавать дополнительные таблицы, учитывающие индивидуальные особенности элементов, при помощи внешних ключей. Такой подход сильно усложняет создание сколько-нибудь сложных взаимосвязей в базе данных;
- высокая трудоемкость манипулирования информацией и изменения связей.
2. СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ
2.1 Функции СУБД
Системы управления реляционными базами данных обладают следующими функциями [3]:
- управление хранилищами данных (размещением данных на физических носителях);
- кэширование данных (размещение данных в быстродействующей памяти);
- ведение журнализации операций для быстро восстановления данных в случае сбоев;
- поддержка стандарта языка SQL;
- управление транзакциями;
- поддержка механизмов обеспечения целостности данных;
- обеспечение защиты и контроля над доступом к данным.
Многие СУРБД также включают в свой состав возможности моделирования, то есть получения физической модели данных из различных видов диаграмм проектирования и наоборот построение диаграмм на основе существующей физической реализации.
Функция обеспечения распределенного доступа к данным хотя и решается за счет функций управления транзакциями и контроля над доступом, однако вносит значительные сложности в их реализации.
Функция управления хранилищами данных скрыта от конечного пользователя, и ее реализация может различаться в различных видах СУБД. Лишь администратор СУБД может влиять на различные параметры данной функции. Данная функция включает в себя механизмы доступа к физическим носителям, а также различные алгоритмы оптимизации для ускорения операций чтения и записи данных.
Все операции манипуляции базой данных в СУБД по возможности выполняются в быстродействующей оперативной памяти, для обеспечения более высокой скорости обработки запросов пользователей. Иначе скорость работы с базой данных при выполнении всех функций СУБД равнялась бы даже не скорости работы физического носителя, на котором расположена БД, а была бы на порядок ниже. Каждая существующая СУБД старается реализовать свой механизм кэширования (буферизации) данных.
Распределенное хранение данных, во время работы СУБД, приводит к необходимости реализации надежного механизма восстановления данных в случае аппаратных или программных сбоев. Решением данной проблемы занимается функция журнализации операций, осуществляемых пользователями СУБД. Ошибки программного обеспечения в большей степени решаются за счет механизма транзакций. И только ошибки, вызванные сбоем аппаратной части компьютера можно решить с помощью журнализации. Ошибки такого рода делятся по степени сложности устранения на мягкие и жесткие сбои.
Мягким называется такой вид сбоев, который приводит к полному отключению работы компьютера. Восстановление системы после такого вида ошибок не вносит больших трудностей, так как теряются только те операции, которые еще не были завершены на момент сбоя.
Жестким сбоем называется такая ситуация при которой повреждается информация, хранимая на внешних носителях информации. Для решения данной проблемы в основном применяются различного вида RAID- массивы и резервное копирование данных. К сожалению, это приводит к удорожанию стоимости серверов, однако потеря, какой-либо финансовой информации, может обойтись намного дороже.
Одним из основных достоинств реляционной модели данных является наличие стандартизированного языка управления реляционными базами данных SQL.
Все современные реляционные СУБД поддерживают данный язык, позволяющий не только управлять данными в существующей базе данных, но и способный изменять структуру и схему базы данных.
К сожалению, производители по-разному трактуют некоторые статьи стандарта, что приводит к появлению множества диалектов языка SQL. Это приводит к необходимости адаптации существующих БД для разных видов СУБД.
Транзакциями называют набор взаимосвязанных операций, с целью доступа или изменения содержимого базы данных, рассматриваемых СУБД как единое целое. Как видно из определения транзакции, что отдельная операция над базой данных является простой транзакцией. Сложные транзакции содержат в себе множество различных операций. Нельзя забывать и о том, одновременно с базой данных могут работать несколько пользователей, а, следовательно, и выполнятся несколько транзакций. При этом самым сложным случаем в данной ситуации будет пересечение данных участвующих в нескольких транзакциях. Эффективная реализация механизма взаимных блокировок транзакций является самым трудоемким в реализации данной функции СУБД.
Целостность данных – это достоверность и не противоречивость данных хранящихся в базе данных. Механизмы поддержания целостности заложены в структуру реляционной модели данных, но вот их реализация целиком возложена на плечи СУБД. То есть СУБД должна самостоятельно следить за выполнением всех необходимых логических правил, заложенных в конкретную базу данных.
Физическим способом обеспечения целостности данных является блокировка данных. Различают блокировку отдельных строк, блоков, страниц. Чем меньше размер блокируемых записей, тем большее количество пользователей могут работать с базой данных одновременно. Вторым способом реализации целостности является тиражирование. Если несколько пользователей работают с одним фрагментом базы данных, то создается необходимое число копий. В случае если в каждом из этих фрагментов осуществляются изменения, то СУБД должна обеспечить непротиворечивость вносимых изменений.