SlideShare a Scribd company logo
1 of 65
Курс по информационни
технологии
Занятие №2

Бази данни. Системи за управление
на бази данни. SQL

2013
Съдържание 1/1
•
•
•
•
•
•
•
•

Бази данни
Системи за управление на бази данни
Проектиране на бази данни
SQL
DDL
DCL
DML
Трансакции
Бази данни
• Какво е „база данни“?
– Структурирана информация
– Взаимосвързана информация
– Организирана в удобен за софтуерна обработка вид
Бази данни
• Какво е „релационна база данни“?
– Организира информацията във формално
дефинирани таблици
– Най-широко разпространеният вид бази данни
Бази данни
• Какво е „таблица“ („релация“)?
– Основна структурна единица на релационните бази
данни
– Колони (полета, атрибути)
• Име
• Дефиниционно множество (възможни стойности)

– Редове (записи, n-торки)
– Редовете и колоните нямат определена наредба
Бази данни
• Какво е „първичен ключ“ („primary key“)?
– Една или повече колони
– Определя еднозначно всеки запис
– Препоръчително е всяка таблица да има първичен
ключ
Бази данни
• Какво е „външен ключ“ („foreign key“)?
– Една или повече колони
– Асоциира се с първичния ключ на някоя таблица
– Реализира зависимост между записите в двете
таблици
– Множество записи от вторичната таблица се
асоциират с един запис от първичната таблица
Бази данни
• Какво е „индекс“ („index“)?
– Оптимизира достъпа до записи по определен
критерий
– Осигурява бързодействие за критични за софтуера
манипулации с данните
Бази данни
• Какво е „схема“ на база данни („schema“)?
–
–
–
–
–

Описва структурата на данните
Таблици
Колони
Ключове и други ограничения
Индекси
Системи за управление на бази данни
• Какво е „система за упралвние на бази данни“?
– Специализирно софтуерно приложение или система
– Позволява създаването, поддръжката и употребата на
бази данни
– Силно оптимизирана за ефективност
– Позволява дефиниране и изпълнение на сложни
действия върху данните и създаване на проекции на
данните
– Някои са предназначени за големи софтуерни системи
(enterprise DBMS), други – за малки приложения
(lightweight DBMS)
Системи за управление на бази данни
• Някои разпространени СУБД
–
–
–
–
–
–
–

Microsoft SQL Server
Oracle
IBM DB2
MySQL
PostgreSQL
Microsoft Access
SQLite
Проектиране на бази данни
• Стъпки при проектирането
– Модел на предметната област
– Трансформиране на модела в база данни
– Нормализиране на базата данни
Проектиране на бази данни
• Модел на обектите и зависимостите
(Entity/Relationship Model)
– Типове обекти (entity types)
– Множества от зависимости (relationship sets)
– Атрибути
Проектиране на бази данни
• Видове зависимости
– Едно-към-едно
– Едно-към-много
– Много-към-много
Проектиране на бази данни
• Атрибути
– Характеризират тип обекти или множество от
зависимости
– Ключови атрибути – участват в еднозначното
определяне на обекти от съответния тип
Проектиране на бази данни
• Примерен проект: Здравословно хранене
–
–
–
–
–

Производители
Марки
Продукти
Хранителни факти
Съставки
Проектиране на бази данни
• E/R модел: Здравословно хранене
Name

Country

1

Producer

Name

n

producer
of

Description

Brand
1
brand
of
n
Name

Ingredient

m

contains

n

Energy
value

Product

Proteins
Name

Amount

Fats
Carbohydrates
Проектиране на бази данни
• Изграждане на базата данни
– Множество обекти -> таблица
– Зависимости едно-към-едно и едно-към-много ->
външни ключове
– Зависимости много-към-много -> свързваща таблица
с външни ключове
Проектиране на бази данни
• База данни: Здравословно хранене
Producers

Brands

Products

ProducerID

BrandID

ProductID

Name

ProducerID

BrandID

Country

Name

Name

Description

EnergyValue
Proteins
Fats
Carbohydrates

Ingredients

ProductIngredients

IngredientID

ProductID

Name

IngredientID
Amount
Проектиране на бази данни
• Нормализиране на базата данни
– Премахване на излишни повторения на данни
– Премахване на зависимости между данните
– Избягване на аномалии
Проектиране на бази данни
• Нормални форми
– Формални критерии за нормалност на таблици
– Всяка следваща нормална форма допълва предишната
с по-строги критерии
– Полезни, но не винаги постижими или оптимални
Проектиране на бази данни
• Малко дефиниции
– Суперключ - множество от колони в таблица, което
еднозначно определя всеки запис
– Минимален суперключ – суперключ, никое
подмножество на който не е суперключ
– Неключова колона – колона, която не участва в никой
минимален суперключ на таблицата
Проектиране на бази данни
• Първа нормална форма (1NF)
– Няма колона, която може да съдържа множества.
– С други думи: таблицата не съдържа подтаблици.
Проектиране на бази данни
• Първа нормална форма (1NF)
Проектиране на бази данни
• Първа нормална форма (1NF)
Проектиране на бази данни
• Втора нормална форма (2NF)
– Не съществува минимален суперключ, за който
стойностите на някоя неключова колона да се
определят еднозначно от негово подмножество.
– С други думи: всяка неключова колона се определя
еднозначно от целия минимален суперключ.
Проектиране на бази данни
• Втора нормална форма (2NF)
Проектиране на бази данни
• Втора нормална форма (2NF)
Проектиране на бази данни
• Други нормални форми
– 3NF, BCNF, 4NF, 5NF
– Няма да ги разглеждаме в подробности
– За повечето таблици е препоръчителна BCNF
SQL
• Какво е „SQL“?
Structured Query Language
Специализиран език за програмиране
Управление и работа с данните в СУБД
Дели се на три части: DDL, DCL и DML
Стандартизиран, но всяка СУБД поддържа собствен
диалект
– Microsoft SQL Server използва T-SQL диалекта
–
–
–
–
–
SQL
• Синтаксис на SQL
– Декларативен език за програмиране
– Съждения
– Не се разграничават главни и малки букви (в общия
случай)
– По конвенция ключовите думи се пишат с главни
букви
SQL
• Идентификатори
– Поредици от букви, долни черти, цифри, която не
започва с цифра
– Поредици от символи, заградени в квадратни скоби
– Поредици от символи, заградени в двойни кавички
test, TEST, TeSt, [test], [TEST], "test", "TEST"
SQL
• Ключови думи
– Могат да се ползват като идентификатори, когато се
заградят в квадратни скоби или кавички
– Някои от тях могат да се ползват като идентификатори
и без да бъдат заградени, когато не са в подходящия
контекст (но не е препоръчително)
SQL
• Променливи
– Незаградени идентификатори с префикс @
– Декларират се с DECLARE
– Обхват - блокът от съждения, в който са дефинирани
DDL
• Data Definition Language (DDL)
– Създаване, модификация, изтриване на таблици,
изгледи, съхранени процедури, функции, тригери,
индекси, потребителски типове данни
– Описване и модифициране на схемата на базата
данни
– Започват с CREATE, ALTER, DROP или TRUNCATE
DDL
• Създаване на таблица
CREATE TABLE [Producers] (
[ProducerID]
int
[Name]
nvarchar(100)
[Country]
nvarchar(100)

NOT NULL
NOT NULL,
NULL,

IDENTITY(1, 1),

CONSTRAINT [PK_Producers] PRIMARY KEY ([ProducerID])
)
GO
DDL
• Създаване на таблица
CREATE TABLE [Brands] (
[BrandID]
int
[ProducerID]
int
[Name]
nvarchar(100)

NOT NULL
NOT NULL,
NOT NULL,

IDENTITY(1, 1),

CONSTRAINT [PK_Brands] PRIMARY KEY ([BrandID]),
CONSTRAINT [FK_Brands_Producer] FOREIGN KEY ([ProducerID])
REFERENCES [Producers] ([ProducerID]) ON DELETE CASCADE
)
GO
DDL
• Модифициране на таблица
ALTER TABLE [Brands] ADD
[Description]
nvarchar(MAX)
GO

NULL
DDL
• Изтриване на таблица
DROP TABLE [Brands]
GO
DDL
• Изпразване на съдържанието на таблица
TRUNCATE TABLE [Brands]
GO
DDL
• Съхранени процедури
CREATE PROCEDURE [CreateProducer]
@vName nvarchar(100),
@vCountry nvarchar(100),
@vProducerID int OUTPUT
AS
INSERT INTO [Producers] ([Name], [Country])
VALUES (@vName, @vCountry)
SELECT @vProducerID = SCOPE_IDENTITY()
GO
DDL
• Функции
CREATE FUNCTION [GetProducerBrandsCount] (@vProducerID int)
RETURNS int
BEGIN
DECLARE @varCount int
SELECT @varCount = COUNT(*) FROM [Brands]
WHERE ([ProducerID] = @vProducerID)
RETURN @varCount
END
DDL
• Изгледи
CREATE VIEW [BrandProducers]
AS
SELECT [B].[BrandID], [B].[Name] AS [BrandName],
[P].[Name] AS [ProducerName]
FROM [Brands] AS [B] INNER JOIN
[Producers] AS [P] ON
([B].[ProducerID] = [P].[ProducerID])
GO
DDL
• Индекси
CREATE INDEX [IX_Producers] ON [Producers] (
[Country] ASC, [Name] ASC
)
GO
DROP INDEX [IX_Producers] ON [Producers]
GO
DCL
• Data Control Language (DCL)
– Управление на достъпа до обекти в базата данни
– Започват с GRANT, REVOKE или DENY
DCL
• Data Control Language (DCL)
GRANT SELECT, INSERT, UPDATE, DELETE ON [Producers] TO [someone]
GO
DENY INSERT, UPDATE, DELETE
GO

ON [Producers] TO [someone]

REVOKE DELETE
GO

ON [Producers] ТО [someone]
DML
• Data Manipulation Language (DML)
– Записване, променяне, изтриване и извличане на
данни
– Приложенията, използващи бази данни, използват
предимно DML
– Започват с SELECT, INSERT, UPDATE или DELETE
DML
• SELECT съждения
– Извличат информация от базата данни
– Най-често използваните съждения
– Резултатът обикновено е набор от записи (rowset)
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
DML
• SELECT и FROM
– SELECT определя колоните, които да участват в
резултата
– FROM определя таблицата (или таблиците), от която се
извличат данните
SELECT * FROM [Producers]

SELECT [BrandID], [Name] FROM [Brands]
DML
• Филтриране
– WHERE посочва критерий (или критерии), по който да
се отсеят записите в резултата
– =, <>, <, <=, >, >=
– EXISTS, IS NULL, LIKE, IN
– NOT, OR, AND
SELECT * FROM [Products]
WHERE ([ProductID] > 10)
SELECT * FROM [Products]
WHERE ([BrandID] = 2)
SELECT * FROM [Brands]
WHERE ([Name] IN (N'Coca-Cola', N'Fanta', N'Sprite', N'Schweppes'))
AND ([Description] IS NOT NULL)
DML
• Влагане на заявки
– Често се налага влагане на заявки – например в
SELECT или WHERE клаузите
SELECT * FROM [Brands]
WHERE ([BrandID] NOT IN (
SELECT DISTINCT [BrandID] FROM [Products]
))
DML
• Сортиране
– ORDER BY посочва колона или редица от колони, по
които да се подредят записите в резултата
SELECT * FROM [Brands]
ORDER BY [Name]
SELECT * FROM [Products]
ORDER BY [EnergyValue] DESC, [Name] ASC
DML
• Агрегиране
– Получаване на единична стойност от стойностите на
всички записи за дадена колона
– COUNT, SUM, MAX, MIN, AVG
SELECT COUNT([Description]) FROM [Brands]
SELECT COUNT(*) FROM [Products]
WHERE ([BrandID] = 4)
SELECT COUNT(DISTINCT [BrandID]) FROM [Products]
DML
• Групиране
– Позволява прилагането на агрегатни функции върху
част от записите в таблица
– GROUP BY указва всички колони, по които трябва да се
групират записите
– HAVING указва допълнителен критерий, по който да се
отсеят групираните резултати
SELECT [BrandID], AVG([EnergyValue]) FROM [Products]
GROUP BY [BrandID]
SELECT [BrandID], COUNT(*) FROM [Products]
GROUP BY [BrandID]
HAVING (COUNT(*) > 1)
DML
• Съединения
– Служат за комбиниране на записи от няколко таблици
– Прилагат се JOIN оператори във FROM клаузата
– Могат да се свързват повече от две таблици с
последователно прилагане на JOIN оператори
DML
• INNER JOIN
– Комбинира всеки запис от едната таблица с един или
повече записи от другата таблица по зададен
критерий
– Премахва записите, които не могат да се свържат с
никой запис от другата таблица
SELECT [P].[ProductID], [B].[Name] AS [BrandName],
[P].[Name] AS [ProductName]
FROM [Products] AS [P] INNER JOIN
[Brands] AS [B] ON ([P].[BrandID] = [B].[BrandID])
DML
• OUTER JOIN
– Комбинира всеки запис от едната таблица с един или
повече записи от другата таблица по зададен
критерий
– Не премахва записите от първата таблица, които не
могат да се свържат с нито един запис от втората
SELECT [P].[Name] AS [ProducerName],
COUNT([B].[BrandID]) AS [BrandCount]
FROM [Producers] AS [P] LEFT OUTER JOIN
[Brands] AS [B] ON ([P].[ProducerID] = [B].[ProducerID])
GROUP BY [P].[Name]
DML
• INSERT съждения
– Създават нови записи в таблица
– Могат да се комбинират със SELECT съждения за
автоматично генериране на данните в новите записи
INSERT INTO ... (...) VALUES (...)
INSERT INTO ... (...) SELECT ...

INSERT INTO [Brands] ([ProducerID], [Name])
VALUES (5, 'Lindt')
INSERT INTO [Products] ([BrandID], [Name], [EnergyValue])
SELECT 9, [Name], [Energy]
FROM [LegacyProducts]
WHERE ([Brand] = N'Lindt')
DML
• UPDATE съждения
– Променят съдържанието на съществуващи записи
– По подразбиране променят всички записи в таблицата
UPDATE ...
SET ...
WHERE ...

UPDATE [Brands] SET [Description] = N'Швейцарско качество!'
WHERE ([Name] = N'Lindt')
UPDATE [Products] SET [EnergyValue] = [EnergyValue]*4.184
DML
• DELETE съждения
– Изтриват записи от таблица
– По подразбиране изтриват всички записи от
таблицата
DELETE FROM ...
WHERE ...
DELETE FROM [Products]
WHERE ([EnergyValue] < 0)
Трансакции
• Какво е „трансакция“?
– Поредица от операции
– Изпълнява се цялостно и независимо от всички
останали трансакции
– Служи за гарантиране консистентността на данните
Трансакции
• Характеристики на трансакциите
–
–
–
–

Атомарност
Консистентност
Изолираност
Устойчивост
Трансакции
• Трансакции в SQL
BEGIN TRANSACTION

COMMIT TRANSACTION
ROLLBACK TRANSACTION
Въпроси?
Благодаря!
• Александър Далемски
–
–
–
–

sasho@david.bg
musashi.bg@gmail.com
Skype: musasho
https://www.facebook.com/adalemski

• ДАВИД академия
–
–
–
–

acad@david.bg
http://acad.david.bg/
@david_academy
https://www.facebook.com/groups/david.academy/

More Related Content

What's hot

Query Optimizer – MySQL vs. PostgreSQL
Query Optimizer – MySQL vs. PostgreSQLQuery Optimizer – MySQL vs. PostgreSQL
Query Optimizer – MySQL vs. PostgreSQLChristian Antognini
 
Improve PostgreSQL replication with Oracle GoldenGate
Improve PostgreSQL replication with Oracle GoldenGateImprove PostgreSQL replication with Oracle GoldenGate
Improve PostgreSQL replication with Oracle GoldenGateBobby Curtis
 
More mastering the art of indexing
More mastering the art of indexingMore mastering the art of indexing
More mastering the art of indexingYoshinori Matsunobu
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQLJim Mlodgenski
 
Transparent sharding with Spider: what's new and getting started
Transparent sharding with Spider: what's new and getting startedTransparent sharding with Spider: what's new and getting started
Transparent sharding with Spider: what's new and getting startedMariaDB plc
 
David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...
David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...
David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...DAVIDROBERTOGALLEGOS
 
Respaldo y Recuperación de bases de datos SQL Server
Respaldo y Recuperación de bases de datos SQL ServerRespaldo y Recuperación de bases de datos SQL Server
Respaldo y Recuperación de bases de datos SQL ServerCHRISTIANGERMANRIVER
 
Рекурсия и рекурсивни функции в езика C++
Рекурсия и рекурсивни функции в езика C++Рекурсия и рекурсивни функции в езика C++
Рекурсия и рекурсивни функции в езика C++Georgi Mirchev
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenTobias Trelle
 
Priprema 5. razred - Microsoft Word
Priprema 5. razred - Microsoft WordPriprema 5. razred - Microsoft Word
Priprema 5. razred - Microsoft WordPogled kroz prozor
 
My Favorite PostgreSQL Books
My Favorite PostgreSQL BooksMy Favorite PostgreSQL Books
My Favorite PostgreSQL BooksEDB
 
MySQL Indexing - Best practices for MySQL 5.6
MySQL Indexing - Best practices for MySQL 5.6MySQL Indexing - Best practices for MySQL 5.6
MySQL Indexing - Best practices for MySQL 5.6MYXPLAIN
 
Oracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryOracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryChien Chung Shen
 
DB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource ManagerDB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource ManagerAndrejs Vorobjovs
 
Priča o prijateljstvu
Priča o prijateljstvuPriča o prijateljstvu
Priča o prijateljstvuBoris Aračić
 

What's hot (20)

Baze podataka
Baze podatakaBaze podataka
Baze podataka
 
Query Optimizer – MySQL vs. PostgreSQL
Query Optimizer – MySQL vs. PostgreSQLQuery Optimizer – MySQL vs. PostgreSQL
Query Optimizer – MySQL vs. PostgreSQL
 
Improve PostgreSQL replication with Oracle GoldenGate
Improve PostgreSQL replication with Oracle GoldenGateImprove PostgreSQL replication with Oracle GoldenGate
Improve PostgreSQL replication with Oracle GoldenGate
 
More mastering the art of indexing
More mastering the art of indexingMore mastering the art of indexing
More mastering the art of indexing
 
Srcani udar
Srcani udar  Srcani udar
Srcani udar
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
 
Transparent sharding with Spider: what's new and getting started
Transparent sharding with Spider: what's new and getting startedTransparent sharding with Spider: what's new and getting started
Transparent sharding with Spider: what's new and getting started
 
David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...
David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...
David Gallegos - Uso de comandos INSERT, UPDATE y DELETE en bases de datos de...
 
Respaldo y Recuperación de bases de datos SQL Server
Respaldo y Recuperación de bases de datos SQL ServerRespaldo y Recuperación de bases de datos SQL Server
Respaldo y Recuperación de bases de datos SQL Server
 
Oracle archi ppt
Oracle archi pptOracle archi ppt
Oracle archi ppt
 
Рекурсия и рекурсивни функции в езика C++
Рекурсия и рекурсивни функции в езика C++Рекурсия и рекурсивни функции в езика C++
Рекурсия и рекурсивни функции в езика C++
 
Jezik test
Jezik  testJezik  test
Jezik test
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
Priprema 5. razred - Microsoft Word
Priprema 5. razred - Microsoft WordPriprema 5. razred - Microsoft Word
Priprema 5. razred - Microsoft Word
 
My Favorite PostgreSQL Books
My Favorite PostgreSQL BooksMy Favorite PostgreSQL Books
My Favorite PostgreSQL Books
 
MySQL Indexing - Best practices for MySQL 5.6
MySQL Indexing - Best practices for MySQL 5.6MySQL Indexing - Best practices for MySQL 5.6
MySQL Indexing - Best practices for MySQL 5.6
 
Oracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryOracle Database Management - Backup/Recovery
Oracle Database Management - Backup/Recovery
 
Ovisnost o hrani
Ovisnost o hraniOvisnost o hrani
Ovisnost o hrani
 
DB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource ManagerDB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource Manager
 
Priča o prijateljstvu
Priča o prijateljstvuPriča o prijateljstvu
Priča o prijateljstvu
 

Similar to Курс по информационни технологии (2013) - 2. Бази данни. Системи за управление на бази данни. SQL

Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...DAVID Academy
 
Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroSvetlin Nakov
 
WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152Miroslav Lessev
 
Konspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klKonspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klIvan Peev
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systemsRosen Spasov
 
същност и предназначение на база от данни
същност и предназначение на база от даннисъщност и предназначение на база от данни
същност и предназначение на база от данниdnaidenowa
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1DAVID Academy
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
Denormalizing your data in MySQL - the right way
Denormalizing your data in MySQL -  the right wayDenormalizing your data in MySQL -  the right way
Denormalizing your data in MySQL - the right wayVeselin Georgiev
 
01 vavedenie v sql server 2000
01 vavedenie v sql server 200001 vavedenie v sql server 2000
01 vavedenie v sql server 2000Ivan Peev
 
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...DAVID Academy
 
2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptxGeorgi Kodinov
 
22 sazdavane na bd i tablici v sql server
22 sazdavane na bd i tablici v sql server22 sazdavane na bd i tablici v sql server
22 sazdavane na bd i tablici v sql serverIvan Peev
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 

Similar to Курс по информационни технологии (2013) - 2. Бази данни. Системи за управление на бази данни. SQL (20)

Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
 
Tema13
Tema13Tema13
Tema13
 
Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - Intro
 
2 bd project
2 bd project2 bd project
2 bd project
 
WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152
 
16 klauzi
16 klauzi16 klauzi
16 klauzi
 
Konspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klKonspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12kl
 
Introduction to-RDBMS-systems
Introduction to-RDBMS-systemsIntroduction to-RDBMS-systems
Introduction to-RDBMS-systems
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systems
 
същност и предназначение на база от данни
същност и предназначение на база от даннисъщност и предназначение на база от данни
същност и предназначение на база от данни
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
Denormalizing your data in MySQL - the right way
Denormalizing your data in MySQL -  the right wayDenormalizing your data in MySQL -  the right way
Denormalizing your data in MySQL - the right way
 
01 vavedenie v sql server 2000
01 vavedenie v sql server 200001 vavedenie v sql server 2000
01 vavedenie v sql server 2000
 
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
 
2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx
 
22 sazdavane na bd i tablici v sql server
22 sazdavane na bd i tablici v sql server22 sazdavane na bd i tablici v sql server
22 sazdavane na bd i tablici v sql server
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 

More from DAVID Academy

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14DAVID Academy
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3DAVID Academy
 

More from DAVID Academy (20)

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3
 

Курс по информационни технологии (2013) - 2. Бази данни. Системи за управление на бази данни. SQL

  • 1. Курс по информационни технологии Занятие №2 Бази данни. Системи за управление на бази данни. SQL 2013
  • 2. Съдържание 1/1 • • • • • • • • Бази данни Системи за управление на бази данни Проектиране на бази данни SQL DDL DCL DML Трансакции
  • 3. Бази данни • Какво е „база данни“? – Структурирана информация – Взаимосвързана информация – Организирана в удобен за софтуерна обработка вид
  • 4. Бази данни • Какво е „релационна база данни“? – Организира информацията във формално дефинирани таблици – Най-широко разпространеният вид бази данни
  • 5. Бази данни • Какво е „таблица“ („релация“)? – Основна структурна единица на релационните бази данни – Колони (полета, атрибути) • Име • Дефиниционно множество (възможни стойности) – Редове (записи, n-торки) – Редовете и колоните нямат определена наредба
  • 6. Бази данни • Какво е „първичен ключ“ („primary key“)? – Една или повече колони – Определя еднозначно всеки запис – Препоръчително е всяка таблица да има първичен ключ
  • 7. Бази данни • Какво е „външен ключ“ („foreign key“)? – Една или повече колони – Асоциира се с първичния ключ на някоя таблица – Реализира зависимост между записите в двете таблици – Множество записи от вторичната таблица се асоциират с един запис от първичната таблица
  • 8. Бази данни • Какво е „индекс“ („index“)? – Оптимизира достъпа до записи по определен критерий – Осигурява бързодействие за критични за софтуера манипулации с данните
  • 9. Бази данни • Какво е „схема“ на база данни („schema“)? – – – – – Описва структурата на данните Таблици Колони Ключове и други ограничения Индекси
  • 10. Системи за управление на бази данни • Какво е „система за упралвние на бази данни“? – Специализирно софтуерно приложение или система – Позволява създаването, поддръжката и употребата на бази данни – Силно оптимизирана за ефективност – Позволява дефиниране и изпълнение на сложни действия върху данните и създаване на проекции на данните – Някои са предназначени за големи софтуерни системи (enterprise DBMS), други – за малки приложения (lightweight DBMS)
  • 11. Системи за управление на бази данни • Някои разпространени СУБД – – – – – – – Microsoft SQL Server Oracle IBM DB2 MySQL PostgreSQL Microsoft Access SQLite
  • 12. Проектиране на бази данни • Стъпки при проектирането – Модел на предметната област – Трансформиране на модела в база данни – Нормализиране на базата данни
  • 13. Проектиране на бази данни • Модел на обектите и зависимостите (Entity/Relationship Model) – Типове обекти (entity types) – Множества от зависимости (relationship sets) – Атрибути
  • 14. Проектиране на бази данни • Видове зависимости – Едно-към-едно – Едно-към-много – Много-към-много
  • 15. Проектиране на бази данни • Атрибути – Характеризират тип обекти или множество от зависимости – Ключови атрибути – участват в еднозначното определяне на обекти от съответния тип
  • 16. Проектиране на бази данни • Примерен проект: Здравословно хранене – – – – – Производители Марки Продукти Хранителни факти Съставки
  • 17. Проектиране на бази данни • E/R модел: Здравословно хранене Name Country 1 Producer Name n producer of Description Brand 1 brand of n Name Ingredient m contains n Energy value Product Proteins Name Amount Fats Carbohydrates
  • 18. Проектиране на бази данни • Изграждане на базата данни – Множество обекти -> таблица – Зависимости едно-към-едно и едно-към-много -> външни ключове – Зависимости много-към-много -> свързваща таблица с външни ключове
  • 19. Проектиране на бази данни • База данни: Здравословно хранене Producers Brands Products ProducerID BrandID ProductID Name ProducerID BrandID Country Name Name Description EnergyValue Proteins Fats Carbohydrates Ingredients ProductIngredients IngredientID ProductID Name IngredientID Amount
  • 20. Проектиране на бази данни • Нормализиране на базата данни – Премахване на излишни повторения на данни – Премахване на зависимости между данните – Избягване на аномалии
  • 21. Проектиране на бази данни • Нормални форми – Формални критерии за нормалност на таблици – Всяка следваща нормална форма допълва предишната с по-строги критерии – Полезни, но не винаги постижими или оптимални
  • 22. Проектиране на бази данни • Малко дефиниции – Суперключ - множество от колони в таблица, което еднозначно определя всеки запис – Минимален суперключ – суперключ, никое подмножество на който не е суперключ – Неключова колона – колона, която не участва в никой минимален суперключ на таблицата
  • 23. Проектиране на бази данни • Първа нормална форма (1NF) – Няма колона, която може да съдържа множества. – С други думи: таблицата не съдържа подтаблици.
  • 24. Проектиране на бази данни • Първа нормална форма (1NF)
  • 25. Проектиране на бази данни • Първа нормална форма (1NF)
  • 26. Проектиране на бази данни • Втора нормална форма (2NF) – Не съществува минимален суперключ, за който стойностите на някоя неключова колона да се определят еднозначно от негово подмножество. – С други думи: всяка неключова колона се определя еднозначно от целия минимален суперключ.
  • 27. Проектиране на бази данни • Втора нормална форма (2NF)
  • 28. Проектиране на бази данни • Втора нормална форма (2NF)
  • 29. Проектиране на бази данни • Други нормални форми – 3NF, BCNF, 4NF, 5NF – Няма да ги разглеждаме в подробности – За повечето таблици е препоръчителна BCNF
  • 30. SQL • Какво е „SQL“? Structured Query Language Специализиран език за програмиране Управление и работа с данните в СУБД Дели се на три части: DDL, DCL и DML Стандартизиран, но всяка СУБД поддържа собствен диалект – Microsoft SQL Server използва T-SQL диалекта – – – – –
  • 31. SQL • Синтаксис на SQL – Декларативен език за програмиране – Съждения – Не се разграничават главни и малки букви (в общия случай) – По конвенция ключовите думи се пишат с главни букви
  • 32. SQL • Идентификатори – Поредици от букви, долни черти, цифри, която не започва с цифра – Поредици от символи, заградени в квадратни скоби – Поредици от символи, заградени в двойни кавички test, TEST, TeSt, [test], [TEST], "test", "TEST"
  • 33. SQL • Ключови думи – Могат да се ползват като идентификатори, когато се заградят в квадратни скоби или кавички – Някои от тях могат да се ползват като идентификатори и без да бъдат заградени, когато не са в подходящия контекст (но не е препоръчително)
  • 34. SQL • Променливи – Незаградени идентификатори с префикс @ – Декларират се с DECLARE – Обхват - блокът от съждения, в който са дефинирани
  • 35. DDL • Data Definition Language (DDL) – Създаване, модификация, изтриване на таблици, изгледи, съхранени процедури, функции, тригери, индекси, потребителски типове данни – Описване и модифициране на схемата на базата данни – Започват с CREATE, ALTER, DROP или TRUNCATE
  • 36. DDL • Създаване на таблица CREATE TABLE [Producers] ( [ProducerID] int [Name] nvarchar(100) [Country] nvarchar(100) NOT NULL NOT NULL, NULL, IDENTITY(1, 1), CONSTRAINT [PK_Producers] PRIMARY KEY ([ProducerID]) ) GO
  • 37. DDL • Създаване на таблица CREATE TABLE [Brands] ( [BrandID] int [ProducerID] int [Name] nvarchar(100) NOT NULL NOT NULL, NOT NULL, IDENTITY(1, 1), CONSTRAINT [PK_Brands] PRIMARY KEY ([BrandID]), CONSTRAINT [FK_Brands_Producer] FOREIGN KEY ([ProducerID]) REFERENCES [Producers] ([ProducerID]) ON DELETE CASCADE ) GO
  • 38. DDL • Модифициране на таблица ALTER TABLE [Brands] ADD [Description] nvarchar(MAX) GO NULL
  • 39. DDL • Изтриване на таблица DROP TABLE [Brands] GO
  • 40. DDL • Изпразване на съдържанието на таблица TRUNCATE TABLE [Brands] GO
  • 41. DDL • Съхранени процедури CREATE PROCEDURE [CreateProducer] @vName nvarchar(100), @vCountry nvarchar(100), @vProducerID int OUTPUT AS INSERT INTO [Producers] ([Name], [Country]) VALUES (@vName, @vCountry) SELECT @vProducerID = SCOPE_IDENTITY() GO
  • 42. DDL • Функции CREATE FUNCTION [GetProducerBrandsCount] (@vProducerID int) RETURNS int BEGIN DECLARE @varCount int SELECT @varCount = COUNT(*) FROM [Brands] WHERE ([ProducerID] = @vProducerID) RETURN @varCount END
  • 43. DDL • Изгледи CREATE VIEW [BrandProducers] AS SELECT [B].[BrandID], [B].[Name] AS [BrandName], [P].[Name] AS [ProducerName] FROM [Brands] AS [B] INNER JOIN [Producers] AS [P] ON ([B].[ProducerID] = [P].[ProducerID]) GO
  • 44. DDL • Индекси CREATE INDEX [IX_Producers] ON [Producers] ( [Country] ASC, [Name] ASC ) GO DROP INDEX [IX_Producers] ON [Producers] GO
  • 45. DCL • Data Control Language (DCL) – Управление на достъпа до обекти в базата данни – Започват с GRANT, REVOKE или DENY
  • 46. DCL • Data Control Language (DCL) GRANT SELECT, INSERT, UPDATE, DELETE ON [Producers] TO [someone] GO DENY INSERT, UPDATE, DELETE GO ON [Producers] TO [someone] REVOKE DELETE GO ON [Producers] ТО [someone]
  • 47. DML • Data Manipulation Language (DML) – Записване, променяне, изтриване и извличане на данни – Приложенията, използващи бази данни, използват предимно DML – Започват с SELECT, INSERT, UPDATE или DELETE
  • 48. DML • SELECT съждения – Извличат информация от базата данни – Най-често използваните съждения – Резултатът обикновено е набор от записи (rowset) SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
  • 49. DML • SELECT и FROM – SELECT определя колоните, които да участват в резултата – FROM определя таблицата (или таблиците), от която се извличат данните SELECT * FROM [Producers] SELECT [BrandID], [Name] FROM [Brands]
  • 50. DML • Филтриране – WHERE посочва критерий (или критерии), по който да се отсеят записите в резултата – =, <>, <, <=, >, >= – EXISTS, IS NULL, LIKE, IN – NOT, OR, AND SELECT * FROM [Products] WHERE ([ProductID] > 10) SELECT * FROM [Products] WHERE ([BrandID] = 2) SELECT * FROM [Brands] WHERE ([Name] IN (N'Coca-Cola', N'Fanta', N'Sprite', N'Schweppes')) AND ([Description] IS NOT NULL)
  • 51. DML • Влагане на заявки – Често се налага влагане на заявки – например в SELECT или WHERE клаузите SELECT * FROM [Brands] WHERE ([BrandID] NOT IN ( SELECT DISTINCT [BrandID] FROM [Products] ))
  • 52. DML • Сортиране – ORDER BY посочва колона или редица от колони, по които да се подредят записите в резултата SELECT * FROM [Brands] ORDER BY [Name] SELECT * FROM [Products] ORDER BY [EnergyValue] DESC, [Name] ASC
  • 53. DML • Агрегиране – Получаване на единична стойност от стойностите на всички записи за дадена колона – COUNT, SUM, MAX, MIN, AVG SELECT COUNT([Description]) FROM [Brands] SELECT COUNT(*) FROM [Products] WHERE ([BrandID] = 4) SELECT COUNT(DISTINCT [BrandID]) FROM [Products]
  • 54. DML • Групиране – Позволява прилагането на агрегатни функции върху част от записите в таблица – GROUP BY указва всички колони, по които трябва да се групират записите – HAVING указва допълнителен критерий, по който да се отсеят групираните резултати SELECT [BrandID], AVG([EnergyValue]) FROM [Products] GROUP BY [BrandID] SELECT [BrandID], COUNT(*) FROM [Products] GROUP BY [BrandID] HAVING (COUNT(*) > 1)
  • 55. DML • Съединения – Служат за комбиниране на записи от няколко таблици – Прилагат се JOIN оператори във FROM клаузата – Могат да се свързват повече от две таблици с последователно прилагане на JOIN оператори
  • 56. DML • INNER JOIN – Комбинира всеки запис от едната таблица с един или повече записи от другата таблица по зададен критерий – Премахва записите, които не могат да се свържат с никой запис от другата таблица SELECT [P].[ProductID], [B].[Name] AS [BrandName], [P].[Name] AS [ProductName] FROM [Products] AS [P] INNER JOIN [Brands] AS [B] ON ([P].[BrandID] = [B].[BrandID])
  • 57. DML • OUTER JOIN – Комбинира всеки запис от едната таблица с един или повече записи от другата таблица по зададен критерий – Не премахва записите от първата таблица, които не могат да се свържат с нито един запис от втората SELECT [P].[Name] AS [ProducerName], COUNT([B].[BrandID]) AS [BrandCount] FROM [Producers] AS [P] LEFT OUTER JOIN [Brands] AS [B] ON ([P].[ProducerID] = [B].[ProducerID]) GROUP BY [P].[Name]
  • 58. DML • INSERT съждения – Създават нови записи в таблица – Могат да се комбинират със SELECT съждения за автоматично генериране на данните в новите записи INSERT INTO ... (...) VALUES (...) INSERT INTO ... (...) SELECT ... INSERT INTO [Brands] ([ProducerID], [Name]) VALUES (5, 'Lindt') INSERT INTO [Products] ([BrandID], [Name], [EnergyValue]) SELECT 9, [Name], [Energy] FROM [LegacyProducts] WHERE ([Brand] = N'Lindt')
  • 59. DML • UPDATE съждения – Променят съдържанието на съществуващи записи – По подразбиране променят всички записи в таблицата UPDATE ... SET ... WHERE ... UPDATE [Brands] SET [Description] = N'Швейцарско качество!' WHERE ([Name] = N'Lindt') UPDATE [Products] SET [EnergyValue] = [EnergyValue]*4.184
  • 60. DML • DELETE съждения – Изтриват записи от таблица – По подразбиране изтриват всички записи от таблицата DELETE FROM ... WHERE ... DELETE FROM [Products] WHERE ([EnergyValue] < 0)
  • 61. Трансакции • Какво е „трансакция“? – Поредица от операции – Изпълнява се цялостно и независимо от всички останали трансакции – Служи за гарантиране консистентността на данните
  • 62. Трансакции • Характеристики на трансакциите – – – – Атомарност Консистентност Изолираност Устойчивост
  • 63. Трансакции • Трансакции в SQL BEGIN TRANSACTION COMMIT TRANSACTION ROLLBACK TRANSACTION
  • 65. Благодаря! • Александър Далемски – – – – sasho@david.bg musashi.bg@gmail.com Skype: musasho https://www.facebook.com/adalemski • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://www.facebook.com/groups/david.academy/