|
Точно так же никому не разрешается трогать файлы, которые вы модифицируете,
пока работа не будет завершена. MySQL частично позволяет эмулировать транзакции,
используя команду LOCK TABLES. Блокировки помогают избежать нарушения
целостности данных, но не дают возможности осуществления операции отката. В
mSQL поддержка транзакций отсутствует.
Триггеры
Триггеры тесно связаны с транзакциями. Продолжая аналогию с дорожным движением,
представим себе полицейского инспектора, сверху наблюдающего за перекрестком.
Если одна из машин совершает какое-либо нарушение, инспектор выезжает на дорогу
и преследует нарушителя.
Триггер — это одна или несколько команд SQL, которые хранятся в базе и
выполняются, когда происходит какое-либо определенное событие. Триггеры
являются методом автоматизации задач контроля. Если выполняется некоторое
условие, триггер может воздействовать на данные или просто сообщить о том, что
имело место срабатывание триггера.
Хранимые процедуры
В простейшем случае хранимые процедуры - это одна или несколько команд SQL,
хранимых в базе данных под каким-либо простым именем и в совокупности
выполняющих некую функцию. В примере с переводом денежных средств можно было бы
просто сохранить эти две команды в одной хранимой процедуре с именем «transfer»
(перевод). Ваше приложение передает хранимой процедуре два номера счета и сумму,
и она выполняет две команды SQL в одной транзакции.
На более высоком уровне сложности хранимые процедуры могут расширять базовый
синтаксис SQL, так что он становится похожим на традиционные языки
программирования. Двумя примерами таких расширений являются Oracle PL/SQL и
Sybase/ Microsoft Tran-sactSQL. Часто можно слышать, что использование хранимых
процедур «помещает бизнес-логику в базу данных».
Вложенные запросы
Обычная команда SQL SELECT осуществляет полный доступ ко всем данным, хранимым
в таблице, - если вы знаете, что ищете. Когда вы не стремитесь извлечь
содержимое таблицы целиком, SELECT в своем основном виде требует ввести хотя бы
часть данных, которые вы хотите извлечь. Например, SELECT name FROM friends
WHERE name LIKE 'B%' требует знания хотя бы одной буквы имени, которое вы ищете.
Что делать в случае, если вы хотите узнать, чей заработок был выше среднего?
Запрос должен выглядеть примерно так:
SELECT name FROM people WHERE salary > ???
Больше чего? Вы понятия не имеете, каков средний заработок, пока не сделаете
выборку по заработкам! Необходимо взять значение SELECT AVG(salary) FROM people
и вставить его в предыдущий запрос. Вложенный запрос позволяет это сделать:
SELECT name
FROM people
WHERE salary > (SELECT AVG(salary) FROM people)
Объекты
Реляционные базы данных - не конечный пункт эволюции. Имеется много
объектно-реляционных и объектно-ориентированных баз данных. На рынке систем
большого масштаба идея чисто реляционных баз данных постепенно отступает. Новый
стандарт SQL3 включит в себя многие изменения, касающиеся поддержки объектов.
В РСУБД все данные хранятся в виде таблиц, представляющих собой просто списки
записей, в свою очередь, являющихся собранием битов, представляющих текст,
числа и другие типы данных. В объектно-ориентированной системе управления
базами данных (ООСУБД) базовой единицей хранения данных является объект. Объект
может содержать не только данные тех же типов, что встречаются в реляционных
базах данных, но также и другие объекты или многомерные данные, скажем, массивы,
или даже выполняемые функции, в мире объектно-ориентированного
программирования обычно называемые методами.
PostgreSQL
Существующая в настоящее время реализация объектно-реляционной СУБД Postgres
известна как PostgreSQL (или Postgres 6). Хотя Post-gres поддерживает SQL в
течение всего трех лет, самой системе уже более десяти лет. В начале 1980-х д-р
Майкл Стоунбрейкер (Michael Sto-nebreaker) из Калифорнийского Университета в
Беркли разработал систему баз данных, которая предвосхитила многие концепции,
реализованные в современных системах управления базами данных. Эта СУБД
получила название Ingres (позднее University Ingres). Ingres была
некоммерческим проектом, финансируемым университетом; проектом, быстро обретшим
последователей среди специалистов по компьютерам во всем мире.
Одна из фирм обратила внимание на коммерческий потенциал этого академического
продукта и, зарегистрировав торговую марку Ingres, сделала коммерческий продукт.
Исходная некоммерческая версия Ingres была переименована в University Ingres,
и ее развитие продолжилось независимо от коммерческой версии.
Через некоторое время д-р Стоунбреикер пошел в своих исследованиях дальше того,
что предполагалось в начальных целях проекта Ingres. Он решил, что настало
время разработать совершенно новую систему баз данных, развивавшую идеи,
заложенные в Ingres, и отправился осваивать новую территорию. Эта система баз
данных стала известна как Postgres, то есть после-Ingres.
Postgres, как и Ingres, была открытым для общественности проектом, который
финансировался университетом. И так же, как в случае Ingres, коммерческий
сектор обратил внимание и на Postgres, в результате чего появился коммерческий
проект Illustra*. Бесплатная Postgres продолжила свое существование и сейчас
соперничает в популярности с MySQL и mSQL среди серверов баз данных среднего
масштаба.
|
|