39
Релационни бази от данни Релационни бази от данни съдържание съдържание Модели на базите от данни Модели на базите от данни Релационните бази от данни Релационните бази от данни RDBMS RDBMS системи системи Таблици, връзки, множественост Таблици, връзки, множественост на връзките, на връзките, E/R E/R диаграми диаграми Нормализация Нормализация Ограничения ( Ограничения ( constraints) constraints) Индекси Индекси

Nakov - RDBMS Systems - Intro

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Nakov - RDBMS Systems - Intro

Релационни бази от данни – Релационни бази от данни – съдържаниесъдържание Модели на базите от данниМодели на базите от данни Релационните бази от данниРелационните бази от данни RDBMSRDBMS системи системи Таблици, връзки, множественост на Таблици, връзки, множественост на

връзките, връзките, E/RE/R диаграми диаграми НормализацияНормализация Ограничения (Ограничения (constraints)constraints) ИндексиИндекси

Page 2: Nakov - RDBMS Systems - Intro

Езикът SQLЕзикът SQL Stored proceduresStored procedures Изгледи (views)Изгледи (views) Тригери (triggers)Тригери (triggers) ТранзакцииТранзакции

Релационни бази от данни – Релационни бази от данни – съдържаниесъдържание

Page 3: Nakov - RDBMS Systems - Intro

Релационни бази от данниРелационни бази от данни

Модели на базите от данниМодели на базите от данни йерархичен (дървовиден)йерархичен (дървовиден) мрежовимрежови релационен (табличен)релационен (табличен) обектно-релационенобектно-релационен

Релационните бази от данниРелационните бази от данни представляват съвкупности от представляват съвкупности от

таблици и връзки между тяхтаблици и връзки между тях ( (релации)релации) ползват здрава математическа основа: ползват здрава математическа основа:

релационната алгебрарелационната алгебра

Page 4: Nakov - RDBMS Systems - Intro

Системи за управление на БДСистеми за управление на БД

Системи за управление на релационни Системи за управление на релационни бази от данни бази от данни ((СУБД) = СУБД) = Relational Relational Database Management System Database Management System ((RDBMS)RDBMS)

Осигуряват програмни средства за:Осигуряват програмни средства за: създаване / промяна / изтриване на създаване / промяна / изтриване на

таблици и връзки между тяхтаблици и връзки между тях добавяне, промяна, изтриване, търсене добавяне, промяна, изтриване, търсене

и извличане на данни от таблицитеи извличане на данни от таблиците поддръжка на езика поддръжка на езика SQLSQL управление на транзакциите управление на транзакциите

(незадължително)(незадължително)

Page 5: Nakov - RDBMS Systems - Intro

Системи за управление на БДСистеми за управление на БД

RDBMS RDBMS системите се наричат ощесистемите се наричат още сървъри за управление на бази от даннисървъри за управление на бази от данни или просто или просто "Database "Database сървърисървъри""

По-известни По-известни RDBMS RDBMS сървъри:сървъри: Microsoft SQL ServerMicrosoft SQL Server Oracle DatabaseOracle Database IBM DB2IBM DB2 PostgreSQLPostgreSQL MySQLMySQL Borland InterbaseBorland Interbase

Page 6: Nakov - RDBMS Systems - Intro

ТаблициТаблици

Таблиците представляват съвкупност Таблиците представляват съвкупност от стойности, подредени в редове и от стойности, подредени в редове и колони. Пример (таблица колони. Пример (таблица PERSONS)PERSONS)::

Редовете имат еднаква структураРедовете имат еднаква структура Колоните имат име и тип (число, Колоните имат име и тип (число,

символен низ, дата или др.)символен низ, дата или др.)

idid namename familyfamily employeremployer11 СветлинСветлин НаковНаков БАРСБАРС

22 БранимирБранимир ГюровГюров BSHBSH

33 МартинМартин КуловКулов CodeAttestCodeAttest

Page 7: Nakov - RDBMS Systems - Intro

Схема на таблицаСхема на таблица

Схема на таблица е наредена Схема на таблица е наредена последователност от описания на последователност от описания на колони (име и тип)колони (име и тип)

Например таблицатаНапример таблицата PERSONSPERSONS има има следната схема:следната схема:

PERSONS (PERSONS ( idid:: число,число, namename: символен низ,: символен низ, familyfamily: символен низ,: символен низ, employer: employer: символен низсимволен низ))

Page 8: Nakov - RDBMS Systems - Intro

Първичен ключПървичен ключ

Първичният ключ Първичният ключ (primary key) (primary key) ее колона колона от таблицата, която уникално от таблицата, която уникално идентифицира даден неин редидентифицира даден неин ред

Два записа (реда) са различни когато са Два записа (реда) са различни когато са различни първичните им ключоверазлични първичните им ключове

Първичният ключ може да е съвкупност Първичният ключ може да е съвкупност от няколко колониот няколко колони

idid namename familyfamily employeremployer11 СветлинСветлин НаковНаков БАРСБАРС

22 БранимирБранимир ГюровГюров BSHBSH

33 МартинМартин КуловКулов CodeAttestCodeAttest

Primary Primary keykey

Page 9: Nakov - RDBMS Systems - Intro

Връзки (релации)Връзки (релации)

Връзките между таблиците се базират на Връзките между таблиците се базират на взаимоотношения взаимоотношения primary key / foreign keyprimary key / foreign key

idid namename country_idcountry_id11 СофияСофия 11

22 ПловдивПловдив 11

33 МюнхенМюнхен 22

44 БерлинБерлин 22

55 МоскваМосква 33

idid namename11 БългарияБългария

22 ГерманияГермания

33 РусияРусия

TOWNTOWN

COUNTRYCOUNTRY

Primary Primary keykey

Primary Primary keykey

Foreign Foreign keykey

Page 10: Nakov - RDBMS Systems - Intro

Връзки (релации)Връзки (релации)

Външният ключ (Външният ключ (foreign key) foreign key) е номер на е номер на запис запис (primary key) (primary key) в друга таблицав друга таблица

Връзките спестяват повтарянето на Връзките спестяват повтарянето на информацияинформация В примера името на държавата не се В примера името на държавата не се

повтаря за всеки градповтаря за всеки град

Връзките имат множественост Връзките имат множественост ((multiplicity)multiplicity) : : 11 x 1 – x 1 – например човек / име на човекнапример човек / име на човек 1 x 1 x много – държава / градовемного – държава / градове многомного x x много – студент / учебен курсмного – студент / учебен курс

Page 11: Nakov - RDBMS Systems - Intro

Множественост на връзкитеМножественост на връзките

idid namename popul_idpopul_id11 СофияСофия 11

22 ПловдивПловдив 22

33 МюнхенМюнхен 33

44 БерлинБерлин 44

55 МоскваМосква 55

Връзка Връзка 1 x 11 x 1 1 запис от едната таблица съответства на 1 запис от едната таблица съответства на

точно 1 запис от другата таблицаточно 1 запис от другата таблица Рядко се използва – няма смисълРядко се използва – няма смисъл

TOWNTOWN

idid populationpopulation11 1 177 0001 177 000

22 720 000720 000

33 1 260 0001 260 000

44 3 400 0003 400 000

55 11 800 00011 800 000

POPULATIONPOPULATION

Page 12: Nakov - RDBMS Systems - Intro

Множественост на връзкитеМножественост на връзките

Връзка Връзка 1 x 1 x много (или много много (или много xx 1)1) 1 запис от първата таблица съответства 1 запис от първата таблица съответства

на много записи от втората таблицана много записи от втората таблица Използва се много честоИзползва се много често

idid namename country_idcountry_id11 СофияСофия 11

22 ПловдивПловдив 11

33 МюнхенМюнхен 22

44 БерлинБерлин 22

55 МоскваМосква 33

idid namename11 БългарияБългария

22 ГерманияГермания

33 РусияРусия

TOWNTOWN

COUNTRYCOUNTRY

Page 13: Nakov - RDBMS Systems - Intro

Множественост на връзкитеМножественост на връзките

Връзка многоВръзка много x x многомного 1 запис от първата таблица съответства 1 запис от първата таблица съответства

на много записи от втората таблица и на много записи от втората таблица и обратнотообратното

Реализира се чрез междинна таблицаРеализира се чрез междинна таблица

idid namename11 ПешоПешо

22 МинкаМинка

33 ГошоГошо

44 ПенкаПенка

idid namename11 .NET.NET

22 JavaJava

33 PHPPHP

STUDENTSTUDENTCOURSECOURSEstudent_idstudent_id course_idcourse_id

11 11

11 22

33 22

33 33

44 22

STUDENT_COURSESTUDENT_COURSE

Page 14: Nakov - RDBMS Systems - Intro

Релационна схемаРелационна схема

Релационна схема на БД наричаме Релационна схема на БД наричаме съвкупността от:съвкупността от: схемите на всички таблицисхемите на всички таблици връзките между таблицитевръзките между таблиците

Релационната схема описва Релационната схема описва структурата на БДструктурата на БД не съдържа данни, а само метаданнине съдържа данни, а само метаданни

Релационните схеми се изобразяват Релационните схеми се изобразяват графично чрез графично чрез Entity/Relationship Entity/Relationship диаграми (диаграми (E/R diagrams)E/R diagrams)

Page 15: Nakov - RDBMS Systems - Intro

E/R E/R диаграми – примердиаграми – примерДиаграмата е Диаграмата е създадена с създадена с

Microsoft SQL Server Microsoft SQL Server Enterprise ManagerEnterprise Manager

Page 16: Nakov - RDBMS Systems - Intro

E/R E/R диаграми – примердиаграми – пример

Диаграмата е Диаграмата е създадена с създадена с

PLATINUM ERwinPLATINUM ERwin

Page 17: Nakov - RDBMS Systems - Intro

E/R E/R диаграми – примердиаграми – примерДиаграмата е създадена Диаграмата е създадена с fabFORCE DB Designerс fabFORCE DB Designer

Page 18: Nakov - RDBMS Systems - Intro

Инструменти за Инструменти за E/RE/R дизайн дизайн

E/R диаграмите се създават с E/R диаграмите се създават с инструменти за моделиране на данни инструменти за моделиране на данни (Data Modeling Tools):(Data Modeling Tools): Microsoft VisioMicrosoft Visio Oracle DesignerOracle Designer Computer Associates ErwinComputer Associates Erwin SQL Server Enterprise ManagerSQL Server Enterprise Manager IBM Rational RoseIBM Rational Rose theKompany Data ArchitecttheKompany Data Architect fabForce DBDesigner (GNU GPfabForce DBDesigner (GNU GPLL проект с проект с

отворен код за Windows и Linux)отворен код за Windows и Linux)

Page 19: Nakov - RDBMS Systems - Intro

НормализацияНормализация

Нормализацията на релационната Нормализацията на релационната схема премахва повтарящите се даннисхема премахва повтарящите се данни

Денормализираните данни съдържат Денормализираните данни съдържат много повторения:много повторения:

продуктпродукт произво-произво-дителдител

ценацена категориякатегория магазинмагазин градград

кисело кисело млякомляко

Млекис Млекис ООДООД

0.670.67 хранителни хранителни стокистоки

супермаркет супермаркет "Менте""Менте"

СофияСофия

хляб хляб "Добружда""Добружда"

Фурна Фурна "Пушека""Пушека"

0.550.55 хранителни хранителни стокистоки

супермаркет супермаркет "Менте""Менте"

СофияСофия

бира бира "Загорка""Загорка"

Загорка АДЗагорка АД 0.580.58 безалкох. безалкох. напиткинапитки

павилион павилион "24 часа""24 часа"

ВарнаВарна

бира бира "Tuborg""Tuborg"

Шуменско Шуменско пиво АДпиво АД

0.670.67 безалкох. безалкох. напиткинапитки

павилион павилион "24 часа""24 часа"

ВарнаВарна

Page 20: Nakov - RDBMS Systems - Intro

НормализацияНормализация

1-ва нормална форма1-ва нормална форма Данните имат табличен видДанните имат табличен вид Полетата в редовете са атомарни Полетата в редовете са атомарни

(неделими) стойности(неделими) стойности Няма повторения на данни в Няма повторения на данни в

рамките на един редрамките на един ред Дефиниран е първичен ключ за Дефиниран е първичен ключ за

всяка таблицавсяка таблица

книгакнига ISBNISBN ( (PK)PK) авторавтор авторавтор__emailemail

.NET Framework.NET Framework 38470284373847028437 Бай КироБай Киро [email protected]@abv.bg

Beginning SQLBeginning SQL 72345344507234534450 Дядо МразДядо Мраз [email protected]@mraz.org

Page 21: Nakov - RDBMS Systems - Intro

НормализацияНормализация

2-ра нормална форма2-ра нормална форма Запазва изискванията на 1-ва Запазва изискванията на 1-ва

нормална форманормална форма В таблиците няма колони, зависещи В таблиците няма колони, зависещи

от част от първичния ключ (ако е от част от първичния ключ (ако е съставен от няколко колони)съставен от няколко колони)

книгакнига ( (PK)PK) авторавтор (PK) (PK) ценацена авторавтор__emailemail

.NET Framework.NET Framework Бай КироБай Киро 37.2537.25 [email protected]@abv.bg

Beginning SQLBeginning SQL Дядо МразДядо Мраз 19.9519.95 [email protected]@mraz.org

Цената зависи Цената зависи от книгатаот книгата

E-mailE-mail-ът зависи -ът зависи от автораот автора

Page 22: Nakov - RDBMS Systems - Intro

НормализацияНормализация

3-та нормална форма3-та нормална форма Запазва изискванията на 2-ра Запазва изискванията на 2-ра

нормална форманормална форма Единствените зависимости между Единствените зависимости между

колоните са "колона зависи от колоните са "колона зависи от първичния ключ"първичния ключ"

idid продуктпродукт произвопроизводителдител_id_id

ценацена категокатегориярия_id_id

магазмагазинин_id_id

градград_id_id

11 кисело млякокисело мляко 22 0.670.67 22 44 11

22 хляб "Добружда"хляб "Добружда" 33 0.550.55 22 44 11

33 ракия ракия "Пещерска""Пещерска"

66 44..3838 55 22 11

44 бира "Tuborg"бира "Tuborg" 44 0.670.67 44 11 33

Page 23: Nakov - RDBMS Systems - Intro

НормализацияНормализация

44-та нормална форма-та нормална форма Запазва изискванията на 3-та Запазва изискванията на 3-та

нормална форманормална форма В таблиците има най-много една В таблиците има най-много една

колона, съдържаща атрибут с колона, съдържаща атрибут с няколко възможни стойности няколко възможни стойности (multi-(multi-valued attribute) valued attribute) за един ключза един ключ

авторавтор_id_id книгакнига статиястатия

22 ..NET ProgrammingNET Programming Regular Expressions in .NETRegular Expressions in .NET

44 Mastering J2EEMastering J2EE Best Practices in J2EEBest Practices in J2EE

Един автор има Един автор има много книгимного книги

Един автор има Един автор има много статиимного статии

Page 24: Nakov - RDBMS Systems - Intro

НормализацияНормализация Пример за нормализирана схемаПример за нормализирана схема

((в 4-та нормална форма):в 4-та нормална форма):

idid имеиме

22 "Млекс" ООД"Млекс" ООД

44 "Загорка" АД"Загорка" АД

idid имеиме

44 бирабира

22 хранителнихранителни

idid продуктпродукт произвопроизводителдител_id_id

ценацена категокатегориярия_id_id

магазмагазинин_id_id

градград_id_id

11 кисело млякокисело мляко 22 0.670.67 22 44 11

22 хляб "Добружда"хляб "Добружда" 33 0.550.55 22 44 11

33 ракия ракия "Пещерска""Пещерска"

66 44..3838 55 22 11

44 бира "Tuborg"бира "Tuborg" 44 0.670.67 44 11 33

idid имеиме

11 BillaBilla

44 METROMETRO

idid имеиме

11 СофияСофия

33 ВарнаВарна

PRODUCTPRODUCT

VENDORVENDOR CATEGORYCATEGORY STORESTORE TOWNTOWN

Page 25: Nakov - RDBMS Systems - Intro

ConstraintsConstraints

Ограниченията (Ограниченията (constraints)constraints) задават задават правила, за данните, които не могат правила, за данните, които не могат да бъдат нарушаванида бъдат нарушавани Ограничение по първичен ключ Ограничение по първичен ключ

((primary key constraint)primary key constraint) Първичният ключ е уникален за Първичният ключ е уникален за

всеки записвсеки запис Ограничение по уникален ключ (Ограничение по уникален ключ (unique unique

key constraint)key constraint) Стойностите в дадена колона (или Стойностите в дадена колона (или

група колони) са уникалнигрупа колони) са уникални

Page 26: Nakov - RDBMS Systems - Intro

ConstraintsConstraints

Ограничение по външен ключ Ограничение по външен ключ ((foreign key constraint)foreign key constraint) Стойността в дадена колона е ключ от Стойността в дадена колона е ключ от

друга таблица друга таблица Ограничение по стойност (Ограничение по стойност (check check

constraint)constraint) Стойностите в дадена колонаСтойностите в дадена колона

изпълняват дадено условиеизпълняват дадено условие Например:Например:

((hour>=0)hour>=0) ANDAND (hour<=24)(hour<=24) name = upper(name)name = upper(name)

Page 27: Nakov - RDBMS Systems - Intro

ИндексиИндекси

Индексите ускоряват скоростта на Индексите ускоряват скоростта на търсене на стойност в дадена търсене на стойност в дадена колона или група от колониколона или група от колони

Ползват се при големи таблициПолзват се при големи таблици Реализират се най-често с Реализират се най-често с B-B-дървета дървета

или хеш-таблициили хеш-таблици Могат да бъдат външни (извън Могат да бъдат външни (извън

таблицата) или вграденитаблицата) или вградени Добавянето и изтриването от Добавянето и изтриването от

индексирани таблици е по-бавноиндексирани таблици е по-бавно

Page 28: Nakov - RDBMS Systems - Intro

Езикът Езикът SQLSQL

SQL (Structured Query Language)SQL (Structured Query Language) Стандартизиран декларативен език Стандартизиран декларативен език

(стандарт) за манипулация на (стандарт) за манипулация на релационни бази от даннирелационни бази от данни

SQL-92 – SQL-92 – поддържан от всички поддържан от всички RDBMSRDBMS SQL-99 –SQL-99 – навлиза все повече навлиза все повече

SQL SQL поддържа:поддържа: Създаване, промяна, изтриване на Създаване, промяна, изтриване на

таблици и други обекти в БДтаблици и други обекти в БД Търсене, извличане, добавяне, Търсене, извличане, добавяне,

промяна и изтриване на даннипромяна и изтриване на данни

Page 29: Nakov - RDBMS Systems - Intro

Езикът Езикът SQLSQL

SQL SQL се състои отсе състои от:: DDL – Data Definition LanguageDDL – Data Definition Language

Команди Команди CREATE, ALTER, DROPCREATE, ALTER, DROP DML – Data Manipulation LanguageDML – Data Manipulation Language

Команди Команди SELECT, INSERT, SELECT, INSERT, UPDATE, DELETEUPDATE, DELETE

ПримерПример за за SQL SELECT SQL SELECT заявка:заявка:

SELECT TOWN.NAME, COUNTRY.NAMESELECT TOWN.NAME, COUNTRY.NAMEFROM TOWN, COUNTRYFROM TOWN, COUNTRYWHERE TOWN.country_id = COUNTRY.idWHERE TOWN.country_id = COUNTRY.id

Page 30: Nakov - RDBMS Systems - Intro

Stored proceduresStored procedures

Процедури на ниво база (запазени Процедури на ниво база (запазени процедури, процедури, stored procedures)stored procedures) Програмен код, който се изпълнява в Програмен код, който се изпълнява в

самия сървър за бази даннисамия сървър за бази данни Работят много по-бързо от външен кодРаботят много по-бързо от външен код Данните са локално достъпниДанните са локално достъпни Могат да приемат параметриМогат да приемат параметри Могат да връщат резултатМогат да връщат резултат

единична стойностединична стойност съвкупност от записи (съвкупност от записи (record set)record set)

Page 31: Nakov - RDBMS Systems - Intro

Stored proceduresStored procedures

Процедури на ниво база се пишат Процедури на ниво база се пишат на език, разширение на на език, разширение на SQLSQL T-SQL T-SQL – – SQLSQL serverserver PL/SQL – PL/SQL – в в OracleOracle

Пример за процедура на Пример за процедура на T-SQLT-SQL::

CREATE PROCEDURE sp_GetInventoryCREATE PROCEDURE sp_GetInventory @location varchar(10) @location varchar(10)ASAS SELECT Product, Quantity SELECT Product, Quantity FROM Inventory FROM Inventory WHERE Warehouse = @location WHERE Warehouse = @location

Page 32: Nakov - RDBMS Systems - Intro

Изгледи (Изгледи (views)views)

Изгледите представляват Изгледите представляват именувани именувани SQL SELECT SQL SELECT заявки, заявки, които се използват като таблицикоито се използват като таблици

Позволяват улеснение при писането Позволяват улеснение при писането на сложни на сложни SQL SQL заявкизаявки

Прилагат се за фина настройка на Прилагат се за фина настройка на сигурността:сигурността: На даден потребител не се дават права На даден потребител не се дават права

над никоя таблицанад никоя таблица Дават му се права само над някои Дават му се права само над някои

изгледи (подмножество от данните)изгледи (подмножество от данните)

Page 33: Nakov - RDBMS Systems - Intro

Изгледи (Изгледи (views) – views) – примерпример

idid companycompanytowntown_id_id

11 Менте ООДМенте ООД 11

22 BulkSoft Inc.BulkSoft Inc. 22

33 ХардСофт АДХардСофт АД 11

44 Спутник АДСпутник АД 33

idid towntowncountcountry_idry_id

11 СофияСофия 11

22 New YorkNew York 33

33 МоскваМосква 22

T_COMPANYT_COMPANY T_TOWNT_TOWN

idid countrycountry11 БългарияБългария

22 РусияРусия

33 САЩСАЩ

T_COUNTRYT_COUNTRY

CREATE VIEW V_BG_COMPANY ASCREATE VIEW V_BG_COMPANY AS SELECT SELECT T_COMPANY.id AS id,T_COMPANY.id AS id, T_COMPANY.company AS companyT_COMPANY.company AS company FROM T_COMPANY INNER JOIN FROM T_COMPANY INNER JOIN (T_TOWN INNER JOIN T_COUNTRY ON(T_TOWN INNER JOIN T_COUNTRY ON T_TOWN.country_id=T_COUNTRY.id)T_TOWN.country_id=T_COUNTRY.id) ON T_COMPANY.town_id=T_TOWN.idON T_COMPANY.town_id=T_TOWN.id WHEREWHERE T_COUNTRY.country="България";T_COUNTRY.country="България";

idid companycompany11 Менте ООДМенте ООД

33 ХардСофт АДХардСофт АД

V_COMPANY_BGV_COMPANY_BG

Page 34: Nakov - RDBMS Systems - Intro

ТригериТригери (triggers) (triggers)

Тригерите (Тригерите (triggers)triggers) са процедури на са процедури на ниво база, които се активират при ниво база, които се активират при някакво условие, например:някакво условие, например: при добавяне на записпри добавяне на запис при промяна на записпри промяна на запис при изтриване на записпри изтриване на запис

Тригерите могат да извършват Тригерите могат да извършват допълнителна обработка на даннитедопълнителна обработка на данните промяна на данните при добавянепромяна на данните при добавяне поддръжка на логове и историяподдръжка на логове и история

Page 35: Nakov - RDBMS Systems - Intro

Тригери – примерТригери – пример

Имаме таблица с имена на фирми:Имаме таблица с имена на фирми:

Тригер, който при добавяне на новаТригер, който при добавяне на нова фирма добавя фирма добавя "Ltd." "Ltd." към името йкъм името й::

CREATE TABLE T_COMPANY(CREATE TABLE T_COMPANY( id int NOT NULL,id int NOT NULL, name varchar(50) NOT NULL)name varchar(50) NOT NULL)

CREATE TRIGGER trg_COMPANY_INSERTCREATE TRIGGER trg_COMPANY_INSERT ON COMPANYON COMPANY FOR INSERTFOR INSERTAS AS UPDATE COMPANY SET name = name + ' Ltd.'UPDATE COMPANY SET name = name + ' Ltd.' WHERE id = (SELECT id FROM inserted)WHERE id = (SELECT id FROM inserted)

Page 36: Nakov - RDBMS Systems - Intro

ТранзакцииТранзакции

Транзакциите са последователности от Транзакциите са последователности от действия (заявки към базата данни), действия (заявки към базата данни), които се изпълняват атомарно:които се изпълняват атомарно: или се изпълняват всичките заедно или се изпълняват всичките заедно

(като едно цяло)(като едно цяло) или никое от действията не се или никое от действията не се

изпълнява изобщоизпълнява изобщо Пример:Пример:

Банково прехвърляне на пари от една Банково прехвърляне на пари от една сметка в другасметка в друга

Ако тегленето или внасянето на парите Ако тегленето или внасянето на парите пропадне, пропада целата операцияпропадне, пропада целата операция

Page 37: Nakov - RDBMS Systems - Intro

Транзакции – примерТранзакции – пример

Имаме таблица с банкови сметки:Имаме таблица с банкови сметки:

Използваме транзакция при трансфер Използваме транзакция при трансфер на пари от сметка на сметка:на пари от сметка на сметка:

CREATE TABLE CREATE TABLE ACCOUNTACCOUNT(( id int NOT NULL,id int NOT NULL, balancebalance decimaldecimal NOT NULL) NOT NULL)

CREATE PROCEDURE sp_Transfer_Money(CREATE PROCEDURE sp_Transfer_Money( @from_acc int,@from_acc int, @to_acc int,@to_acc int, @ammount decimal@ammount decimal) AS) AS

(примерът продължава)(примерът продължава)

Page 38: Nakov - RDBMS Systems - Intro

Транзакции – примерТранзакции – примерBEGIN TRANSACTIONBEGIN TRANSACTION

UPDATE ACCOUNT set balance = balance - @ammountUPDATE ACCOUNT set balance = balance - @ammountWHERE id = @from_accWHERE id = @from_acc

IF @@rowcount <> 1 BEGINIF @@rowcount <> 1 BEGIN ROLLBACK TRANSACTIONROLLBACK TRANSACTION RAISERROR ('Invalid source account!', 16, 1)RAISERROR ('Invalid source account!', 16, 1) RETURNRETURNENDEND

UPDATE ACCOUNT set balance = balance + @ammountUPDATE ACCOUNT set balance = balance + @ammountWHERE id = @to_accWHERE id = @to_acc

IF @@rowcount <> 1 BEGINIF @@rowcount <> 1 BEGIN ROLLBACK TRANSACTIONROLLBACK TRANSACTION RAISERROR ('Invalid destination account!', 16, 1)RAISERROR ('Invalid destination account!', 16, 1) RETURNRETURNEND END

COMMIT TRANSACTIONCOMMIT TRANSACTION

Page 39: Nakov - RDBMS Systems - Intro

Транзакции и изолацияТранзакции и изолация

Транзакциите могат да дефинират Транзакциите могат да дефинират нива на изолация нива на изолация (isolation levels)(isolation levels)

ниво на ниво на изолацияизолация

четене на четене на непотвър-непотвър-дени даннидени данни

неповто-неповто-ряемост ряемост

при четенепри четене

фантомни фантомни записизаписи

Read uncommittedRead uncommitted дада дада дада

Read committedRead committed нене дада дада

Repeatable readRepeatable read нене нене дада

SerializableSerializable нене нене нене