Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

sql server+c++

.pdf
Скачиваний:
18
Добавлен:
07.06.2015
Размер:
2.12 Mб
Скачать

г) Ідентифікуючий зв’язок «один до одного чи багатьох».

ця лінія вказує на те, що одній стрічці у таблиці Group ставиться у відповідність лише одна стрічка з таблиці Course

Course

 

Group

 

 

 

 

 

NOT NULL

належать

 

NameGRP

 

NOT NULL

 

NameCRS

 

 

 

 

 

 

 

 

 

 

 

 

Institute NOT NULL

 

 

NameCRS (FK)

NOT NULL

 

 

 

Note

 

NULL

 

 

 

 

 

 

 

 

 

 

 

 

цей «воронячий слід» з рискою вказує на те, що одній стрічці у таблиці Course ставиться у відповідність одна або декілька стрічок з таблиці Group

д) Неідентифікуючий зв’язок «один до одного чи багатьох».

Course

 

Group

 

 

 

 

 

NOT NULL

 

належать

 

NameGRP

 

NOT NULL

 

NameCRS

 

 

 

 

Institute NOT NULL

 

 

 

 

 

 

 

 

 

 

 

NameCRS (FK)

 

NOT NULL

 

 

 

 

 

 

 

Note

 

NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

е) Неідентифікуючий зв’язок «нуль чи один до нуля, одного чи багатьох».

цей єдиний кружечок вказує на те, що одній стрічці у таблиці Group ставиться у відповідність нуль або одна стрічка з таблиці Course

Course

 

Group

 

 

 

 

 

NOT NULL

належать

 

NameGRP

NOT NULL

 

NameCRS

 

 

Institute NOT NULL

 

 

 

 

 

 

 

 

NameCRS (FK)

NULL

 

 

 

 

 

Note

 

NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цей «воронячий слід» з кружком вказує на те, що одній стрічці у таблиці Course ставиться у відповідність нуль чи декілька стрічок з таблиці Group

9

є) Неідентифікуючий зв’язок «нуль чи один до нуля чи одного».

цей єдиний кружечок вказує на те, що одній стрічці у таблиці Group ставиться у відповідність нуль або одна стрічка з таблиці Course

Course

 

Group

 

 

 

 

NameCRS

NOT NULL

належать

 

NameGRP

NOT NULL

 

 

 

 

 

 

 

 

 

 

Institute NOT NULL

 

 

 

 

 

 

 

 

 

NameCRS (FK)

NULL

 

 

 

 

 

Note

 

NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

цей єдиний кружечок вказує на те, що одній стрічці у таблиці Course ставиться у відповідність нуль чи одна стрічка з таблиці Group

ж) Зв’язок «багато до багатьох».

Student

 

Subject

 

IDstd

IDENTITY

IDsbj

IDENTITY

Surname NOT NULL

NameSubject NOT NULL

 

 

 

 

 

 

 

 

зв’язок «багато до багатьох»

 

 

 

 

 

 

 

 

 

реалізується за допомогою до-

 

 

 

 

 

 

 

 

 

даткової стикувальної таблиці

 

Student

 

Joint

 

Subject

 

 

 

IDstd

 

IDENTITY

 

IDstd (FK)

NOT NULL

 

 

IDsbj

 

IDENTITY

 

 

 

 

 

 

NOT NULL

 

 

 

 

 

 

 

Surname NOT NULL

 

IDsbj (FK)

 

 

NameSubject NOT NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

АБО

 

 

Student

 

 

Joint

 

Subject

 

 

 

IDstd

 

IDENTITY

 

 

ID_Joint NOT NULL

 

 

IDsbj

 

IDENTITY

 

Surname NOT NULL

 

 

 

 

 

 

 

 

NameSubject NOT NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

NOT NULL

 

 

 

IDstd (FK)

 

 

 

 

 

 

 

 

NOT NULL

 

 

 

 

 

 

 

 

 

 

 

 

IDsbj (FK)

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рекурсивні види зв’язку:

а) Рекурсивний зв’язок «один до одного» типу список.

List

 

 

 

 

 

 

ID

 

IDENTITY

 

Sername NOT NULL

 

Name

NULL

 

ID2 (FK)

NULL

(AK1.1)

 

 

 

 

 

наступний

б) Рекурсивний зв’язок «один до нуля чи багатьох» типу дерево.

Tree

ID

 

IDENTITY

Sername NOT NULL

Name

NULL

ID2 (FK)

NULL

підлеглий

в) Рекурсивний зв’язок «багато до багатьох» типу сітка.

Network

ID IDENTITY

Sername NOT NULL

Name NULL

Network

ID IDENTITY

Sername NOT NULL

Name NULL

рекурсивний зв’язок «багато до багатьох» реалізується за допомогою додаткової стикувальної таблиці

Joint

ID1 (FK) NOT NULL

ID2 (FK) NOT NULL

11

Позначення специфікацій для правил видалення та обновлення стрічок у зв’язаних таблицях

R

Restrict

Накладає обмеження (заборону) на видалення чи

 

 

зміну значення потенційного ключа, якщо існують

 

 

для нього значення зовнішнього ключа.

C

Cascade

Поширює будь-які модифікації для значення по-

 

 

тенційного ключа основної таблиці на відповідні

 

 

їм значення зовнішнього ключа залежної таблиці.

 

 

При видаленні стрічки – видаляються усі залежні

 

 

стрічки в підлеглій таблиці, при зміні значення

 

 

потенційного ключа – змінюються відповідні зна-

 

 

чення зовнішнього ключа у залежних стрічках.

SN

Set Null

При будь-якій модифікації (видалення, обновлен-

 

 

ня) значення потенційного ключа основної таблиці

 

 

у зовнішні ключі залежних стрічок встановлю-

 

 

ються null-значення.

SD

Set Default

При модифікації (видалення, обновлення) значень

 

 

потенційного ключа зовнішні ключі приймають

 

 

визначені значення за замовчуванням. Наприклад,

 

 

при видаленні останньої групи (КС-43) усі її

 

 

студенти автоматично переводяться у першу

 

 

групу, тобто приймають визначене значення за

 

 

замовчуванням (КС-41), при умові, що таке

 

 

значення для потенційного ключа існує.

D:Delete rule Префікс для правила видалення.

U:Update rule Префікс для правила обновлення.

Parent

 

 

D:C

Child

 

 

 

 

ID

 

INTEGER

 

U:SN

 

ChildName

 

CHAR(10)

 

 

 

 

 

 

 

 

 

 

 

 

Name

CHAR(10)

 

 

ID_Par (FK)

INTEGER

 

 

 

 

 

 

 

 

 

Birthday

 

DATE

 

Surname

CHAR(10)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2.13. Позначення правил механізму цілісності посилань

12

3.Основні конструкції SQL-сценарію для створення БД

3.1.Оператори визначення даних DDL (Data Definition

Language).

Ці оператори мови SQL призначені для опису структури баз даних. Фактично, усі маніпуляції зі структурою БД побудовані на основі таких трьох операторів:

A. Оператор CREATE.

Створює різні об’єкти бази даних, з визначеним додатковим синтаксисом для кожного об’єкта окремо.

CREATE <тип об’єкта> <ім’я об’єкта> ...

B. Оператор ALTER.

Дає можливість вносити зміни в об’єкти бази даних після їхнього створення. За синтаксисом цей оператор подібний до CREATE.

ALTER <тип об’єкта> <ім’я об’єкта>

C. Оператор DROP.

Виконання цього оператора призводить до повного видалення будь-якого вказаного у ньому об’єкта (об’єктів). Синтаксис оператора залишається повністю однаковим для всіх основних об’єктів бази даних. Особливістю його є те, що за один раз він може знищувати одразу декілька однакових об’єктів, вказаних через кому.

DROP <тип об’єкта> <ім’я об’єкта> [ , … n]

3.2. Створення Бази Даних (CREATE DATABASE).

Процес створення бази даних полягає у визначенні імені, розміру та розташування файлів. Після створення база даних буде доступна лише адміністратору та користувачу, що її створив, для всіх решта – необхідно буде призначати права доступу до неї. Важливим моментом є те, що створювати об’єкти бази даних можна лише на локальному сервері.

Найпростіша синтаксична форма для створення бази даних може виглядати так:

CREATE DATABASE KSA ;

13

Усі бази даних створюються на основі системної бази model, і тому при такому найпростішому синтаксисі створиться нова база даних з копією об’єктів та параметрів бази даних model, а назви файлів будуть визначені на основі назви створюваної бази даних та розміщені у папці на диску, що є призначена за замовчуванням для сервера.

Для встановлення додаткових параметрів використовують розширену форму синтаксису оператора CREATE DATABASE.

CREATE DATABASE <ім’я бази даних>

[ ON [ PRIMARY ]

(

NAME = ' <логічне ім’я файла> ' , FILENAME = ' <ім’я файла в ОС>.mdf '

[ , SIZE = <розмір> [ KB | MB | GB | TB ] ]

[ , MAXSIZE ={<макс. розмір> [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = <значення приросту> [ KB | MB | GB | TB | % ] ]

)

[ ,...n ]

]

[ LOG ON

(

NAME = ' <логічне ім’я файла> ' , FILENAME = ' <ім’я файла в ОС>.ldf '

[ , SIZE = <розмір> [ KB | MB | GB | TB ] ]

[ , MAXSIZE ={<макс. розмір> [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = <значення приросту> [ KB | MB | GB | TB | % ] ]

)

[ ,...n ]

]

[;]

-- параметри за замовчуванням підкреслені сірим фоном

Ім’я нової бази даних повинно бути унікальним всередині екземпляра SQL Server та мати максимальну довжину 128 символів.

Ключове слово ON вказує на явне визначення параметрів файлу з даними. Необов’язковий параметр PRIMARY вказує, що створювані файли належать до основної файлової групи, призначеної для фізичного зберігання даних. Для бази даних також можна передбачити вторинні файлові групи, однак, для нашої роботи достатньо викорис-

14

тати передбачену за замовчуванням структуру бази даних, в якій уся інформація зберігається в одному файлі.

Ключове слово LOG ON вказує на явне визначення параметрів файлу журналу бази даних.

Ключове слово NAME задає логічне ім’я файлу, яке використовується в SQL Server при посиланні на файл.

Ключове слово FILENAME задає ім’я файлу в операційній системі (фізичне ім’я). Файл з даними має мати розширення .mdf, додаткові файли з даними мають розширення .ndf, a файли журналів – .ldf.

Ключове слово SIZE задає початковий розмір файлу.

Ключове слово MAXSIZE задає максимальний розмір, до якого може збільшуватися в об’ємі файл. Параметр UNLIMITED вказує, що файл може збільшуватися в об’ємі аж до повного заповнення простору диску. Для файлу журналу встановлене обмеження сягає 2 ТБ, а для файлу з даними – 16 ТБ.

Ключове слово FILEGROWTH задає розмір автоматичного приросту для файлу. Значення цього параметра не може перевищувати значення параметра MAXSIZE. Значення 0 вказує, що автоматичний приріст відключений і додавання простору заборонено. Якщо параметр FILEGROWTH є не заданий, тоді значенням за замовчуванням є 1МБ для файлів з даними та 10% для файлів журналів.

Проілюструємо на прикладі створення бази даних з явним визначенням файлу даних та журналу. Перед початком створення доцільно перевірити існування на сервері бази даних з таким ж іменем. Команду створення бази даних слід подавати з системної бази даних master.

USE master

GO

--якщо база даних з таким іменем вже існує, тоді вона знищується

IF DB_ID ('KSA') IS NOT NULL

DROP DATABASE KSA GO

--створюється нова база даних

CREATE DATABASE KSA

ON PRIMARY

( NAME = 'KSA2', FILENAME = 'C:\data\KSA.mdf' , SIZE = 3MB ,

MAXSIZE = UNLIMITED, FILEGROWTH = 1MB )

LOG ON

( NAME = 'KSA2_log', FILENAME = 'C:\data\KSA_log.ldf' , SIZE = 1MB ,

MAXSIZE = UNLIMITED , FILEGROWTH = 10% )

15

3.3. Створення Таблиці.

Оператор CREATE TABLE є доволі складним та потребує не лише створення нової таблиці, але й опису стовпців, обмежень, первинних та вторинних ключів. Тому будемо розглядати його по частинах. Його загальний синтаксис виглядає так:

CREATE TABLE

[ <ім’я бази> . [<ім’я схеми>] . | <ім’я схеми> . ] <ім’я таблиці> ( { <визначення стовпця> | <визначення обчислюваного стовпця> }

[ <табличні обмеження> ] [ , ...n ]

) [ ON { <файлова група> | 'default' } ]

[ TEXTIMAGE_ON { <файлова група> | 'default' } ] [ ; ]

Ім’я нової таблиці повинно бути унікальним всередині схеми зазначеної бази даних та мати максимальну довжину 128 символів. Якщо ім’я бази даних не вказано, то таблиця створюється у поточній базі даних, якщо ж не вказана і схема, тоді за замовчуванням таблиця створюється у схемі dbo.

Ключове слово ON визначає файлову групу, в якій буде зберігатися таблиця.

Ключове слово TEXTIMAGE_ON визначає файлову групу, в якій будуть зберігатися стовпці з типами даних text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max). Якщо ж у таблиці немає стовпців з такими типами даних, тоді цей параметр є недопустимий.

3.3.1. Створення стовпців.

Перелік стовпців описується таким синтаксисом:

<ім’я стовпця> <тип даних> [ NULL | NOT NULL ]

[ DEFAULT <значення> | IDENTITY [ ( seed , increment ) ] ] [ <стовпцеві обмеження> ]

[ , ... n ]

Ім’я стовпця повинно бути унікальним в межах таблиці та мати максимальну довжину 128 символів.

Перелік доступних типів даних з їх детальним описом наведений в інструкції до лабораторної роботи № 2 з цього предмету [13].

16

Опція NULL чи NOT NULL вказує, чи стовпець допускає ввід nullзначень. Якщо стовпець є автоінкрементим, чи на ньому побудований первинний ключ, то для даного стовпця цей параметр повинен бути обов’язково вказаний як NULL, або взагалі не вказаний (інакше сервер згенерує помилку).

Ключове слово DEFAULT вказує значення за замовчуванням для вибраного стовпця, що присвоюється йому при відсутності явно заданого значення при вставленні стрічки.

Ключове слово IDENTITY вказує, що стовпець є автоінкрементний. Для нього необхідно вказати початкове значення та значення приросту, або нічого не вказувати. Якщо параметри явно не задані, тоді використовуються значення за замовчуванням (1,1). У таблиці може бути визначений як автоінкрементний лише один стовпець. Однак можуть бути визначені ще додатково глобальні ідентифікатори

GUID.

Для кожного стовпця також можуть бути визначені обмеження у вигляді ключів чи перевірного обмеження CHECK.

Покажемо на прикладі процес створення таблиці:

USE KSA GO

CREATE TABLE Student

(

ID

int

 

IDENTITY ,

Surname

nchar(10)

NOT NULL ,

 

Name

nchar(10)

NULL ,

 

Hobby

nchar(15)

NOT NULL

DEFAULT 'No' ,

Date

datetime

NULL

DEFAULT GETDATE() ,

GuidID

uniqueidentifier

NOT NULL

DEFAULT NEWID()

)

Перед створенням таблиці необхідно переключитися на робочу базу даних (у прикладі – USE KSA), для якої має бути створена таблиця, в іншому випадку, слід вказати повний шлях в її імені.

Стовпець ID створюється як автоінкрементний, і тому ми опустили опцію NOT NULL (хоча могли і вказати). За замовчуванням відлік почнеться від одиниці з одиничним приростом.

Для стовпця Hobby ми визначили значення за замовчуванням. Якщо для стовпця Date не вказується значення, то воно за замов-

чуванням генерується системною функцією GETDATE().

Стовпець GuidID визначений як GUID-ідентифікатор, та за замовчуванням заповнюється системною функцією NEWID().

17

Якщо у таблиці заповнити, наприклад, лише стовпець Surname такими значеннями: Ступченко, Іванів, Парфенюк, то решта значень визначаться значеннями за замовчуванням, або встановляться NULL. При вибірці даних із цієї таблиці отримаємо такий результат:

 

ID

Surname

Name

Hobby

Date

 

GuidID

 

 

 

 

 

 

 

 

 

 

 

1

Ступченко

NULL

No

2009-11-11 14:29:18

2A97CBEA-D7E1-457E-9397-DA51F6A86D50

2

Іванів

NULL

No

2009-11-11 14:29:36

5551279D-8294-4740-8158-71FD230D7BBE

3

Парфенюк

NULL

No

2009-11-11 14:29:49

212ABF39-EBC9-484B-A32E-74B9597D0C8D

3.3.2. Створення обчислювальних стовпців.

Обчислювальний стовпець представляє собою віртуальний стовпець, що фізично не зберігається в таблиці, якщо для нього не встановлена опція PERSISTED. Значення стовпця обчислюється на основі виразу, з використанням значень інших стовпців цієї ж таблиці. Вирази можуть містити імена необчислювальних стовпців, константи та функції, однак, не можуть містити вкладені запити та значення з інших таблиць.

Обчислювальний стовпець описується таким синтаксисом:

<ім’я обчислювального стовпця>

AS <обчислювальний вираз>

[ PERSISTED [ NOT NULL ] ]

[ <стовпцеві обмеження> ]

 

 

Опція PERSISTED дає можливість фізично зберігати значення для обчислювального стовпця. Якщо ця опція встановлена, тоді для обчислювального стовпця з’явиться можливість побудувати індекс.

CREATE TABLE Order_list

 

 

(

 

 

 

ID

int

NOT NULL

IDENTITY ,

Name

nchar(10)

NOT NULL ,

 

Number

int

NULL ,

 

Price

decimal(6,2)

NULL

DEFAULT 0 ,

Total AS Number*Price

)

Для стовпців, що беруть участь в обчислювальному виразі, варто призначати значення за замовчуванням, особливо це актуально для цифрової звітності. Якщо ж одне зі значень є невизначене, тобто null, тоді вираз не буде обчислений, і повернеться також значення null.

18

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]