Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Завдавання обмежень.




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

· обмеження NOT NULL;

· обмеження первинного ключа;

· обмеження UNІQUE;

· обмеження зовнішнього ключа;

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

При додаванні поля в непорожню таблицю за допомогою оператора ALTER TABLE для нього не можна встановлювати значення NOT NULL тому що у вже наявних записах для нового стовпця немає значень. У цьому випадку спочатку необхідно додати нове поле без обмеження NOT NULL. Заповнити нове поле для всіх записів таблиці і тільки потім модифікувати таблицю, задавши обмеження NOT NULL.

Обмеження первинного ключа. Первинні ключі вказуються при створенні таблиці. Поля, що входять до складу ключів не можуть приймати значення NULL. Обмеження може бути задано двома способами.

Спосіб 1. Застосовується, коли первинний ключ складається тільки з одного поля. Ключ задається за допомогою ключового слова PRІMARY KEY.

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

CREATE TABLE ТаблКурс

(Група ІNT NOT NULL PRІMARY KEY,

Курс ІNT NOT NULL);

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

Приклад. Завдання складеного ключа для таблиці ТаблДисципліна. Передбачається, що номера груп, найменування дисциплін і вид контролю (іспит чи залік) у таблиці можуть повторюватися, але їхнє сполучення унікальне.

CREATE TABLE ТаблДисципліна

(Група INT NOT NULL,

Дисципліна CHAR(60) NOT NULL,

ВидКонтролю CHAR(10) NOT NULL,

PRIMARY KEY (Група, Дисципліна, ВидКонтролю));

Обмеження UNІQUE схоже на обмеження первинного ключа, тому що припускає, що значення в полі, для якого встановлене таке обмеження не будуть повторюватися. Однак обмеження UNІQUE допускає наявність порожніх значень (якщо для цього поля не встановлене обмеження NOT NULL). Обмеження задається за допомогою ключового слова UNІQUE, що вказується при описі поля.

Приклад. Завдання для деяких полів таблиці обмеження, щоб значення в них не повторювалися.

CREATE TABLE Ім’яТаблиці

(Ім’яПоля1 тип даних NOT NULL PRІMARY KEY,

Ім’яПоля2 тип даних UNІQUE,

Ім’яПоля3 тип даних NOT NULL,

....

Ім’яПоля тип даних NOT NULL UNІQUE);

Обмеження UNІQUE можна задати для групи полів. Значення у полі такої групи можуть повторюватися. Однак комбінація значень полів у групі повинна бути унікальною.

Приклад. Завдання для групи полів таблиці обмеження, щоб комбінація значень у них не повторювалися

CREATE TABLE Ім’яТаблиці

(Ім’яПоля1 тип даних NOT NULL PRIMARY KEY,

Ім’яПоля2 тип даних,

Ім’яПоля3 тип даних NOT NULL,

….

UNIQUE (Ім’яПоля2, Ім’яПоля3));

Обмеження зовнішнього ключа є основним механізмом для підтримки посилальної цілісності бази даних. Поле в таблиці, оголошене в якості зовнішнього ключа, використовується для посилання на поле батьківської таблиці. Поле батьківської таблиці, на яке посилається зовнішній ключ іншої таблиці, називається первинним ключем. Типи даних у полях зовнішнього і батьківського ключа повинні бути однаковими. А імена полів можуть бути різними. Однак для чіткості їх теж краще назвати однаково. Зовнішній ключ може бути складеним (складатися з декількох полів). Поля батьківського ключа, на який посилається складений зовнішній ключ, повинні мати той же порядок, що і в зовнішньому ключі. Кожне значення зовнішнього ключа безпосередньо прив'язано до значення первинного ключа в батьківській таблиці. На рис. 13.1. показані зв'язки між таблицями. Поле зовнішнього ключа позначено жирною крапкою, а поле первинного ключа - стрілкою.

 
 

 

Обмеження зовнішнього ключа (FOREІGN KEY) може бути задано в операторі CREATE TABLE або в операторі ALTER TABLE.

FOREІGN KEY <ім'я зовнішнього ключа> (список полів зовнішнього ключа)

REFERENCES <ім'я батьківської таблиці> (список полів первинного ключа)

Приклад. Додати зовнішній ключ у ТаблГрупа для зв'язку з батьківської таблицею ТаблКурс по полю Група.

ALTER TABLE ТаблГрупа

ADD CONSTRAІNT Зв’язокКурс FOREІGN KEY (Група)

REFERENCES ТаблКурс (Група);

 

Оператор створення індексу має формат виду:

CREATE [ UNІQUE ] ІNDEX <ім'я індексу>

ON <ім'я таблиці> (<ім'я стовпця> [ ASC | DESC ]

[,<ім'я стовпця> [ ASC | DESC 1...)

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

Задавши необов'язкову опцію UNІQUE, можна забезпечити унікальність значень у всіх зазначених в операторі стовпцях. Власне кажучи, створення індексу з указівкою признака UNІQUE означає визначення ключа в створеній раніше таблиці.

При створенні індексу можна задати порядок автоматичного сортування значень у стовпцях - у порядку зростання ASC (за замовчуванням), чи у порядку убування DESC. Для різних стовпців можна задавати різний порядок сортування.

Приклад. Створення індексу.

Для таблиці ТаблГрупа (ПІБ, Група) потрібно створити індекс maіn_іndex для сортування прізвищ за абеткою. Оператор створення індексу може мати вигляд:

CREATE ІNDEX maіn_іndex

ON ТаблГрупа (ПІБ);

Оператор вилучення індексу має формат виду:

DROP ІNDEX <ім'я індексу>

Оператор вилучає індекс із відповідним ім'ям.

Приклад видалення індексу maіn_іndex з таблиці ТаблГрупа.

DROP ІNDEX maіn_іndex;

Створено чотири порожні відношення, для заповнення кортежів яких необхідно скористатися командою ІNSERT ІNTO

Оператор вставки нових записів має формати двох видів:

INSERT INTO < ім'я таблиці> [(<список стовпців>)] VALUES (<список значень>); і INSERT INTO < ім'я таблиці> [(<список стовпців>)] <речення SELECT>;

У першому форматі оператор ІNSERT призначений для введення нових записів із заданими значеннями в стовпцях. Порядок перерахування імен стовпців повинний відповідати порядку значень, перерахованих у списку операнда VALUES. Якщо <список стовпців > опущений, то в <списку значень > повинні бути перераховані всі значення в порядку стовпців структури таблиці. Імена стовпців вказуються в круглих дужках і розділяються комами. Значення також вказуються в круглих дужках, розділяються комами, символьні рядки (текст) укладаються в одиночні лапки.

В другому форматі оператор ІNSERT призначений для введення в задану таблицю нових рядків, відібраних з іншої таблиці за допомогою речення SELECT.

Приклад. Ввести в таблицю новий запис. Для цього можна записати оператор виду:

ІNSERT ІNTO ТаблСтудент (ПІБ, Дисципліна, Оцінка)

VALUES ('Петров Ф. І.', 'Бази даних', 5);

Або еквівалентний запис

ІNSERT ІNTO ТаблСтудент

VALUES ('Петров Ф. І.', 'Бази даних', 5);

У результаті введення нових записів відношення ТаблСтудент, ТаблГруппа, ТаблДисципліна, ТаблКурс мають вигляд наведений на рис. 13.2.

Оператор вилучення записів має формат виду:

DELETE FROM <ім'я таблиці>

[ WHERE <умова>];

Результатом виконання оператора DELETE є вилучення з зазначеної таблиці рядків, що задовольняють умові, визначеній у операнді WHERE. Якщо необов'язковий операнд WHERE опущений, то вилученню підлягають усі записи таблиці. Сама таблиця не вилучається, але вона стане порожньою (незаповненою).

Приклад. Вилучення записів. У зв'язку з виходом у декретну відпустку необхідно виключити студентку Уткіну Н. В. зі списку групи.

DELETE FROM ТаблГрупа

WHERE ПІБ = 'Уткіна Н. В.';

Всі операції маніпулювання даними зв'язані з цілісністю бази даних. Тому операції маніпулювання даними не завжди здійсненні, навіть якщо синтаксично вони написані правильно. Якщо спробувати вилучити яке-небудь прізвище з відношення ТаблГрупа, то СУБД не дозволить це зробити, тому що відношення ТаблСтудент (дочірня таблиця) і ТаблГрупа (батьківська таблиця) зв’язані між собою по полю ПІБ (не може бути нащадків без батьків). Спочатку треба вилучити значення з дочірньої таблиці, а потім таке ж значення з батьківської таблиці. Якщо при зв'язуванні таблиць установлене каскадне вилучення, то при вилученні запису з батьківської таблиці автоматично будуть вилучені такі ж записи з дочірньої таблиці.

ТаблСтудент
ПІБ Дисципліна Оцінка
Петров Ф. І. Бази даних  
Сідоров К. А. Бази даних  
Міронов А. В. Бази даних  
Владіміров В. А. Інформатика  
Стєпанова К. Е. Англійська мова  
Крилова Т. С. Англійська мова  
Стєпанова К. Е. Бази даних  
Крилова Т. С. Бази даних  
Сідоров К. А. Інформатика  
Стєпанова К. Е. Інформатика  
Крилова Т. С. Інформатика  
Міронов А. В. Інформатика  
Владіміров В. А. Бази даних  
Трофімов П. А. Мережі  
Петров Ф. І. Інформатика  
Іванова Е. А. Мережі  
Уткіна Н. В. Мережі  
Владіміров В. А. Англійська мова  
Міронов А. В. Англійська мова  
Сідоров К. А. Англійська мова  
Петров Ф. І. Англійська мова  

 

ТаблГрупа
ПІБ Група
Петров Ф. І.  
Сідоров К. А.  
Міронов А. В.  
Крилова Т. С.  
Стєпанова К. Е.  
Владіміров В. А.  
Трофімов П. А.  
Іванова Е. А.  
Уткіна Н. В.  

 

ТаблДисципліна
Група Дисципліна ВидКонтролю
  Бази даних Іспит
  Інформатика Іспит
  Англійська мова Іспит
  Англійська мова Залік
  Мережі Іспит

 

ТаблКурс  
Група   Курс  
   
   

Рисунок 13.2.

 

Оператор обновлення (модифікації даних).

Для обновлення даних у БД використовується операція UPDATE.

UPDATE <ім'я таблиці>

SET <ім'я стовпця> = <нове значення>

[ WHERE <умова добору>];

Частина WHERE є необов'язковою. Вона грає тут ту ж роль, що й в операторі DELETE, - дозволяє відібрати рядки, до яких буде застосована операція модифікації. Якщо умова добору не задається, то операція модифікації буде застосована до всіх рядків таблиці.

Приклад. Обновлення записів. Студентка Степанова К. Е, перездала екзамен з дисципліни 'Бази даних' із двійки на четвірку. У цьому випадку треба виконати коректування таблиці ТаблСтудент.

UPDATE ТаблСтудент

SET ТаблСтудент.Оцінка = 4

WHERE ТаблСтудент.ПІБ = 'Степанова К. Е.'

AND ТаблСтудент.Дисципліна = 'Бази даних';

Приклад. Відновлення всіх записів таблиці. Частина WHERE опускається. Наприклад, для переводу всіх груп на наступний курс операція обновлення має вигляд:

 

UPDATE ТаблКурс SET ТаблКурс.Kypc = Курс + 1
Група   Курс  
   
   

результат

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...