Общая часть (часть 2) (2015) (by Кибитова) (1161598), страница 48
Текст из файла (страница 48)
Эти соображения приводят к введению понятия совместимости по взятиюПриведем более точное определение операции расширенного декартоварасширенного декартова произведения. Два отношения совместимы по взятиюпроизведения.Пусть имеются два отношения R1{a1, a2, …, an} и R2{b1, b2, …, bm}.Спец.реляц.операции:расширенногодекартова произведения в том и только в том случае, если пересечениеТогдарезультатомоперацииR1 TIMESявляетсяотношение, …,отношенияan, b1, b2,множеств имен атрибутов,взятыхиз их R2схемотношений,пусто.R{aЛюбые1, a2двавсегдамогутсовместимымипо взятию декартоваприменить…, bm},телостатькоторогоявляется множествомкортежейпроизведения,вида {ra1, ra2,если…, ran, rb1, rb2,действительнополезнаяоперациясоединения.операцию переименования к одному из этих отношений.…, rbm} таких, что {ra1, ra2, …, ran} входит в тело R1, а {rb1, rb2, …, rbm} входит в По поводутеоретико-множественныхалгебрыследуетещетелоR2.
заметить,Следуетчто иоперациявзятияоперацийдекартовареляционнойпроизведенияне являетсяслишком+ заметить,операция присваиванияпереименованиеатрибутов.чтонавсечетыре операцииявляютсяассоциативными.Всеоченьоперации,осмысленнойпрактике.Во-первых,мощностьтела ее результатавеликакромедажевзятияразности,являютсякоммутативными,т.е.AOPB=BOPA.Посколькусхемамощностяхрезультирующегоотношенияявляетсяобъединениемпридопустимыхоперандов,а во-вторых,результатоперациисхемне более отношений-операндов,то очевиднойпроблемойможетбытьименованиеатрибутовSQL— универсальныйкомпьютерныйязык,применяемыйдлясоздания,модификациииинформативен,чем взятыев совокупностиоперанды.Какбудетпоказанодалее,управленияданнымив реляционныхбазахданных.результирующегоотношения,еслиотношения-операндыобладаютодноименными16.
АлгебраA.основнойсмыслвключенияоперациирасширенного декартовапроизведенияв составатрибутами. алгебры Кодда состоит в том, что на ее основе определяетсяреляционнойSQL основывается на реляционной алгебре.Пусть r – отношение, A – имя атрибута отношения r, T – имя соответствующего типаЭтиприводятк введениюпонятия совместимости(т. е.соображениятипаили доменаатрибутаA), v – значениетипа T. Тогда: по взятиюЯзыкSQLпредставляетсобойсовокупностьрасширенного декартова произведения.
Два отношения совместимы по взятиюрасширенногодекартоваи только вмножествотом случае, еслипересечение·• операторов;заголовкомHr произведенияотношения r в томназываетсяатрибутов,т.е.· инструкций;множествименатрибутов,взятыхизихсхемотношений,пусто.Любыедваотношенияупорядоченных пар вида <A, T>. По определению никакие два атрибутав этом· имогутвычисляемыхфункций.всегдастать совместимымипо взятиюмножествене могут содержатьодно идекартовато же имяпроизведения,атрибута A; если применитьоперациюпереименованиякодномуизэтихотношений.•кортеж tr, соответствующий заголовку Hr, – это множество упорядоченныхОператорытриплетов вида <A, T, v>, по одному такому триплету для каждого атрибута вСледуетHr;заметить, что операциявзятия декартовапроизведенияявляется слишкомСогласнообщепринятомустилю программирования,операторы(и другиенезарезервированныеслова)восмысленнойSQLвсегдаследуетписатьпрописнымибуквами.напрактике.Во-первых,мощностьтелаеерезультатаоченьвеликадаже•тело Br отношения r – это множество кортежей tr.
Заметим, что (в общемпри допустимыхмощностяхоперандов,а во-вторых,результатоперациине болееHr, нослучае) могутсуществоватьтакиекортежи tr,которыесоответствуютинформативен,чемвзятыевсовокупностиоперанды.Какбудетпоказанодалее,входятв Br.ОператорынеSQLделятсяна:основнойвключенияоперациирасширенногодекартовапроизведениясоставЗаметим,смыслчто заголовок– этомножество(упорядоченныхпар вида<A, T>),втело– это·операторыопределенияданных(DataDefinitionLanguage,DDL)реляционнойалгебрыКоддасостоитвтом,чтонаееосновеопределяетсямножество (кортежей tr), и кортеж – это множество (упорядоченных триплетов видаo v>).CREATEсоздаетобъект БД(самубазу, таблицу,представление,парапользователяи т. д.)<A, T,Элементзаголовка– этоатрибут(т. е.
упорядоченнаявида <A,T>);o ALTER изменяет объектэлемент тела – это кортеж; элемент кортежа – это упорядоченный триплет вида <A,o DROP удаляет объектT, v>. Любое подмножество заголовка – это заголовок, любое подмножество тела –· операторы манипуляции данными (Data Manipulation Language, DML)это тело,и любое подмножество кортежа – это кортеж.o SELECT считывает данные, удовлетворяющие заданным условиямoINSERT добавляет новые данныеo UPDATE изменяетсуществующиеданныескобки: <NOT>, <AND>, <OR> и т.
д. ВИмена реляционныхоперацийберутся в угловыеo DELETEданные входят операции реляционного дополнения <NOT>,исходныйбазовый удаляетнабор операций· операторыопределениядоступа кпереименованияданным (Data ControlLanguage,DCL)удаленияатрибута<REMOVE>,атрибута<RENAME>,реляционнойoGRANTпредоставляетпользователю(группе)разрешениянаопределенные операцииконъюнкции <AND> и реляционной дизъюнкции <OR>.с объектомo REVOKE отзывает ранее выданные разрешенияОперацияреляционногоo DENYзадает запрет,дополненияимеющий приоритет над разрешением· операторы управления транзакциями (Transaction Control Language, TCL)o COMMIT применяет транзакцию.Пусть so обозначаетрезультат операции <NOT> r.
Тогда:ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции.o SAVEPOINT делит транзакцию на более мелкие участки.• Hs = Hr (заголовок результата совпадает с заголовком операнда);Создание базы данных.• Bs = {ts : exists tr (trBr and ts = tr) } (в тело результата--------------------------------------------------------------входятвсекортежи,соответствующиезаголовку и не входящие в телоCREATE DATABASE zawodоперанда).Операция <NOT> производит дополнение s заданного отношения r.
Заголовком sявляется заголовок r. Тело s включает все кортежи, соответствующие этому заголовкуи не входящие в тело r.CREATE TABLE ceh ( nomerceh int, nameceh char(20) )В уже существующей таблице мы можем поменять тип столбца, добавить новый, уничтожить старый.--------------------------------------------------------------ALTER TABLE kadry ADD (dolvnostx CHAR(20) BEFORE zarplata),DROP(pribytie), ADD CONSTRAINT UNIQUE(tabnom, fio) CONSTRAINTtabnomfioALTER TABLE items MODIFY (manu_code char(4))--------------------------------------------------------------Изменение структуры таблицы приводит к физическому преобразованию данных в ней. Если изменен тип столбца, то данные в немпреобразуются к новому типу, и если это невозможно осуществить,то оператор ALTER "валится" с кодом ошибки, а таблица остаетсяв неизмененном состоянии.View - "псевдо" таблица, базируется на существующих таблицах.--------------------------------------------------------------CREATE VIEW poor AS SELECT tabnom, fio, datarovd FROM kadryWHERE zarplata < 120# создано view - "псевдотаблица" из трех столбцов содержащая# строки из таблицы kadry, в которых zarplata меньше 120 рублей.--------------------------------------------------------------Ведет себя точно так же, как настоящая таблица, только место надиске под нее не отводятся, поскольку данные, лежащие в ней насамом деле хранятся в таблице, на которой это view базируется.Индекс - дополнительная структура к столбцам таблицы, нужен дляускорения поиска значений в столбце.Выдавать и забирать права доступа к таблице может владелец таблицы, Администратор Базы Данных (имеющий DBA права), а так жепользователь, которому было выдано право выдавать права (Оператором GRANT WITH GRANT OPTIONS)--------------------------------------------------------------REVOKE ALL ON customer FROM PUBLICGRANT ALL ON customer TO iwanow, petrow WITH GRANT OPTIONGRANT UPDATE(fname,lname,company, sity),SELECTON customer TO PUBLICREVOKE CONNECT FROM sidorowa, rootREVOKE DBA FROM ivanov--------------------------------------------------------------Отобрать у вас права DBA (если вы, конечно, им являетесь) можеттолько другой DBA.На время транзакции все измененные строки автоматически блокируются системой от изменения (но не от просмотра).
Вы можетеявно локировать всю таблицу целиком, тогда система не будетблокировать строки по отдельности. Вы можете блокировать таблицу целиком не только от изменения но и от просмотра.--------------------------------------------------------------BEGIN WORKLOCK TABLE kadry. . .UNLOCK TABLE kadry. . .LOCK TABLE kadry EXCLUSIVE--------------------------------------------------------------Если ваш оператор пытается записать в блокированную другимпользователем строку, то оператор "сваливается".
Вы можете установить для своей программы режим "Ждать разблокированиястрок".--------------------------------------------------------------SET LOCK MODE TO WAITУказать базе новый системный журнал.--------------------------------------------------------------START DATABASE zawod WITH LOG IN "/ARM/log/zawod"--------------------------------------------------------------Восстанавливают разрушенную (например из-за сбоя оборудования)базу данных так:--------------------------------------------------------------В среде UNIX1. Уничтожают остатки базы.2. Заливают вместо них копию базы с ленты (например, недельнойдавности) используя команду cpio или утилиту INFORMIX dbimport.3.Входят в среду INFORMIX и выполняют операторы:DATABASE kadry EXCLUSIVE# чтобы никто не лезROLLFORWARD DATABASE kadry# прогнать базу вперед# по системному журналуCLOSE DATABASE# теперь всем можно работать--------------------------------------------------------------Транзакция--------------------------------------------------------------BEGIN WORK# начать транзакцию.
. .# операторыIF все нормально THEN COMMIT WORKELSEROLLBACK WORKEND IF--------------------------------------------------------------Если во время транзакции программа "свалилась" то INFORMIX автоматически сделает откатку.• Простейшая форма оператора SELECT.•• Первый пример находит в таблице kadry строку, в которой столбец• tabnum=345 . Из этой строки берутся только три указаных столбца.• Второй пример выбирает ВСЕ строки из таблицы ceh, и все столбцы.• --------------------------------------------------------------• SELECT fio, dolvn, zarplata FROM kadry WHERE tabnom=345•• SELECT * FROM ceh•• SELECT kadry.fio, ceh.nameceh WHERE kadry.nomerceh=ceh.nomerceh• --------------------------------------------------------------• Третий пример выбирает фамилии работников из таблицы кадры, аназвания цехов, в которых они работают, из таблицы ceh.--------------------------------------------------------------INSERT INTO kadry VALUES (4,0,"Грицько",num,"10/25/1939",NULL)INSERT INTO customer VALUES (ps_customer.*)# ps_customer - переменная типа RECORD - аналог структуры# языке Си.
Этот оператор вставляет значения элементов записи# ps_customer в соответствующие поля таблицы customerвINSERT INTO kadry(tabnom, fio, nomerceh, dolvnostx)SELECT 0 , fio, 4, dolvnostx FROM kadryoldWHERE nomerceh=3 AND fio IS NOT NULL#последний оператор вставляет сразу несколько строк• UPDATE.•• меняет значения столбцов, в строках, удовлетворяющим WHERE ус• ловию.• --------------------------------------------------------------• UPDATE kadry SET fio="Зыкова" WHERE fio="Гирусова"•• UPDATE ceh SET kod_ceha[1,4]=nameceh[5,8]WHERE• nomerceh BETWEEN 3 AND 5 OR nameceh IN ("токарный","литейный")• --------------------------------------------------------------• В таблице ceh в цехах номер 3,4,5 а так же в токарном и литей• ном первые четыре символа в коде цеха будут заменены на подстроку поля nameceh из той же строки.Предложение WHERE может присутствовать в любом из операторовDELETE, UPDATE, SELECT, когда нужно задать условия на строки,которые требуется обработать (соответственно, уничтожить, изменить или выбрать).
Рассмотрим структуру и примеры использованияпредложений WHERE.• * УСЛОВИЯ С ПОДЗАПРОСОМ *•• --------------------------------------------------------------• SELECT fio FROM kadry WHERE zarplata=•(SELECT MAX(zarplata) FROM kadry )• --------------------------------------------------------------• Здесь подзапрос возвращает единственное значение - максимальное• значение зарплаты. А внешний SELECT оператор находит фамилии• обладателей оной.•• --------------------------------------------------------------• SELECT fio, shifr, organizaciq FROM zaqwki WHERE denxgi_rek is• not NULL and• gorod in (SELECT gorod FROM regiony WHERE region="Урал")• --------------------------------------------------------------• Здесь запрос выводит данные об руководителях, получивших финан• сирование и работающих на Урале.•• ---------------------------------------------------------------• SELECT order_num,stock_num,manu_code, total_price FROM items x• WHERE total_price > (SELECT 2*MIN(total_price)•FROM items WHERE order_num=x.order_num)• --------------------------------------------------------------• Этот запрос (используя связанный подзапрос) выводит список всех• изделий, чья общая цена не менее чем в два раза превосходит ми• нимальную цену изделий перечисленных в этом же ордере.•• Вы можете соединять любое количество вышеперечисленных условийвместе, используя логические операторы NOT, AND, OR.• Оператор UNLOAD•• Оператор UNLOAD сбрасывает данные из таблицы в файл в печатном• представлении.