Навігація
Головна
 
Головна arrow Інформатика arrow Бази даних
< Попередня   ЗМІСТ   Наступна >

Встановлення зв'язків між таблицями

Для створення зв'язків у WISQL використовуються інструкції виду PRIMARY KEY (NG) - створення основного ключа по полю NG; FOREIGN KEY (NG) REFERENCES GRUPPA (NG) - створення зовнішнього ключа NG з підключенням до основного ключу NG таблиці GRUPPA.

Структура таблиць і зв'язків розробленої РБД представлена на рис. 14.15. Зв'язки і таблиці в РБД по можливості збережені для здійснення переносу і конвертації інформації з раніше описаної БД.

Створення збережених процедур. Процедура в СУБД InterBase може застосовуватися як в алгоритмі додатки, так і, поряд з тригерами, у власне базах даних для каскадного видалення і оновлення.

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

Наведемо приклад збереженої процедури, що здійснює видалення ключових записів з таблиці Kafedra:

ALTER PROCEDURE KAFEDRA_DEL (DKKAF INTEGER)

AS

declare variable dsh_spec integer;

declare variable dng varchar (6);

declare variable dnzk varchar (10);

declare variable dkprikaz integer;

declare variable dkprep integer;

BEGIN

for select sh_spec from specialnost

where kkaf =: dkkaf

into: dsh_spec

do

begin

Схема зв'язків таблиць БД

Рис. 14.15. Схема зв'язків таблиць БД "Навчальний процес"

for select ng from gruppa

where gruppa.sh_spec =: dsh_spec

into: dng

do

begin

for select nzk from student

where student.ng =: dng

into: dnzk

do

begin

delete from ipp where ipp.nzk =: dnzk;

delete from uspevaem where uspevaem.nzk =: dnzk;

delete from atestacia where atestacia.nzk =: dnzk;

delete from oplata where oplata.nzk =: dnzk;

delete from obshegit where obshegit.nzk =: dnzk;

for select kprikaz from prikaz

where prikaz.nzk =: dnzk

into: dkprikaz

do delete from vid_prikaz where vidjDrikaz.kprik-: dkprikaz;

delete from prikaz where prikaz.nzk =: dnzk;

end

delete from student where student.ng =: dng;

delete from izuchenie where izuchenie.ng =: dng;

delete from gruppa where gruppa.ng =: dng;

end

delete from specialnost where sh_spec =: dsh_spec;

end

for select kprep from prepod where kkaf =: dkkaf

into: dkprep

do begin

delete from izuchenie where kprep =: dkprep;

delete from uspevaem where kprep =: dkprep;

delete from atestacia where kprep =: dkprep;

end

delete from prepod where kkaf =: dkkaf;

delete from laba where laba.kkaf =: dkkaf;

delete from kafedra where kkaf =: dkkaf;

suspend;

END

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

Багато підлеглі таблиці самі мають підлеглі таблиці. Таким чином, перед видаленням даних в них необхідно здійснити видалення даних у підпорядкованих їм таблицях і лише потім - в батьківських таблицях. Вийти із становища дозволяє підтримувана в InterBase вкладеність процедур мови SQL. Завдяки цьому існує можливість реалізувати досить складну процедуру каскадного видалення, що містить в собі до 16 вкладень при розмірі подібної процедуру не більше 48 кбайт.

У БД "Навчальний процес" є кілька збережених процедур, які виконують такі роботи:

  • • GruppaDel - каскадне видалення в таблиці Gruppa та пов'язаних з нею таблицях;
  • • KafedraDel - каскадне видалення в таблиці Kafedra та пов'язаних з нею таблицях;
  • • Predmet_Del - каскадне видалення в таблиці Predmet та пов'язаних з нею таблицях;
  • • Predpr Del - каскадне видалення в таблиці Predpr та пов'язаних з нею таблицях.
  • • PrepodDel - каскадне видалення в таблиці Prepod та пов'язаних з нею таблицях;
  • • Prikaz_Del - каскадне видалення в таблиці Prikaz та пов'язаних з нею таблицях;
  • • SpecialnostDel - каскадне видалення в таблиці Specialnost та пов'язаних з нею таблицях;
  • • Student Del - каскадне видалення в таблиці Student та пов'язаних з нею таблицях.

Заповнення (завантаження таблиць даними з існуючої БД "Навчальний процес"), як і в централізованій БД, можливе або прямо в таблицю, або у форми. Склад форм описаний в інтерфейсі користувача.

На відміну від централізованої БД в даній БД частина даних заповнюється автоматично через генератори.

Створення системи генераторів. У явному вигляді InterBase не підтримує полів типу "автонумерація". Замість цією в InterBase існує механізм, званий "генераторами". Генератор - якась змінна, значення якої може бути отримано і збільшено на деяке значення за допомогою вбудованої функції GEN_ID.

Зазвичай генератори використовують у тригерах, при цьому текст тригера може бути наступним:

CREATE TRIGGER TI_CLIENTS FOR CLIENTS

ACTIVE BEFORE

INSERT POSITION 0

AS

BEGIN IF (new.CLIENTJD IS NULL) THEN

CLIENTJD = GENJD (<hmh генератора>, 1);

END,

де 0 - початкове значення; 1 - крок збільшення в поточному значенні генератора.

Механізм генераторів гарантує, що навіть при конкурентному (паралельному) виклику функції GEN_ID кожному користувачеві буде видаватися унікальне значення. Останнє значення генератора завжди запам'ятовується в БД, тому розробнику не потрібно піклуватися про відновлення його максимального значення після під'єднання до БД. Генератори є змінними типу integer (longint).

Програмний комплекс (БД) "Навчальний процес" містить три генератора, призначених для генерації унікальних кодів:

  • • Gen_kkaf - кафедр;
  • • Gen_kpreci - предмета;
  • • Gcn_Kprp - підприємства.
 
Якщо Ви помітили помилку в тексті позначте слово та натисніть Shift + Enter
< Попередня   ЗМІСТ   Наступна >
 
Дисципліни
Агропромисловість
Аудит та Бухоблік
Банківська справа
БЖД
Географія
Документознавство
Екологія
Економіка
Етика та Естетика
Журналістика
Інвестування
Інформатика
Історія
Культурологія
Література
Логіка
Логістика
Маркетинг
Медицина
Нерухомість
Менеджмент
Педагогіка
Політологія
Політекономія
Право
Природознавство
Психологія
Релігієзнавство
Риторика
Соціологія
Статистика
Техніка
Страхова справа
Товарознавство
Туризм
Філософія
Фінанси
Пошук