МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ІСМ
/
Звіт до лабораторної роботи №1
Проектування логічної структури сховища даних з архітектурою
Корпоративна фабрика.
Львів-2014р.
Тема бази даних: олімпійські ігри London 2012.
Мета: Вивчення порядку, методів та засобів проектування і побудови сховища даних з
корпоративною архітектурою та оцінка часу виконання запитів.
Теоретичні відомості
Парадигма для реляційних даних в сховищі даних (парадигма корпоративної інформаційної фабрики КІФ – Corporate Information Factory, CIF) розроблена Інмоном і передбачає, що дані повинні перебувати на низькому рівні ступені деталізації і в третій нормальній формі (3НФ, 3NF).
Після того, як дані такі формалізовані, важливо налаштувати їх для кожної групи користувачів та частково денормалізувати для пришвидшення виконання запиту.
Інмон вважає, що реляційна основа є достатньо гнучкою, щоб підтримувати багатовимірні вітрини даних і інші структури даних, як наприклад, сховища дослідження, бази даних, видобування даних.
Білл Інмон підтримує повторний або спіральний підхід до розвитку великого сховища даних. За цим підходом розвиток сховища відбувається ітераційно, тобто у разі виникнення потреби додається одна таблиця за один раз, що забезпечує лише незначну зміну схеми даних. Тому такий підхід до проектування сховища ще називають спіральним підходом..
У моделі Інмона, використовуючи повторний метод, помилки і внесення змін можуть стосуватись невеликої кількості даних, без необхідності повторно програмувати великі кількості даних у сховищі даних.
3НФ підхід дозволяє ґранулювати деталізовані та інтеґровані дані, забезпечивши максимальну гнучкість для опрацювання даних.
Білл Інмон також радить, щоб сховище даних містило корпоративно найвищий ґранульований рівень даних. Тоді структура і вміст сховища даних не підпорядковуватимуться вимогам будь-якого відділу, але натомість обслуговуватимуть вимоги корпорації.
Як відмітні характеристики підходу Білла Інмона до архітектури сховищ даних можна назвати наступні:
Використання реляційної моделі організації атомарних даних і просторової - для організації сумарних даних.
Використання ітеративного або «спірального» підходу при створенні більших сховищ даних, тобто «будівництво» сховища даних не відразу, а по частинах. Це дозволяє, при необхідності, вносити зміни в невеликі блоки даних або програмних кодів і рятує від необхідності перепрограмовувати значні обсяги даних у сховищі. Те ж саме можна сказати й про потенційні помилки: вони також будуть локалізовані в межах порівняно невеликого масиву без ризику зіпсувати все сховище.
Використання третьої нормальної форми для організації атомарних даних, що забезпечує високий ступінь детальності інтеґрованих даних і, відповідно, надає корпораціям широкі можливості для маніпулювання ними і зміни формату і способу подання даних у міру необхідності.
Сховище даних – це проект корпоративного масштабу, що охоплює всі відділи й обслуговує потреби всіх користувачів корпорації.
Сховище даних – це не механічна колекція вітрин даних, а фізично цілісний об'єкт.
Хід роботи
Перелік, опис та обґрунтування таблиць в сховищі даних:
Змагання – інформація про проведені змагання.
Вид спорту – назви видів спорту(бокс, плавання і т.д.)
Дисципліна – містить назви дисциплін.
Країни – інформація про країни.
Медаль – таблиця, яка вказую власника кожної медалі.
Спортсмени – містить основну інформацію про спортсменів, які завоювали медалі.
Люди - містить інформацію(прізвище, номер країни) про людей(спортсменіві тренерів), які причетні до завойованих медалей.
Стадіони – містить інформацію про ті стадіони чи зали, в яких проводилися змагання.
Тренери – основна інформація про тренерів, підопічні яких завоювали медаль.
Приклади формування і заповнення таблиць значеннями:
Створення бази даних і формування таблиць:
create database Олімпіада character set utf8 collate default;
create table Олімпіада.Країни (
ID_країни int not null auto_increment,
Країна char(45) not null,
primary key (ID_країни)
);
create table Олімпіада.Вид_спорту (
ID_спорту int not null auto_increment,
Назва char(45) not null,
primary key (ID_спорту)
);
create table Олімпіада.Дисципліна (
ID_дисципліни int not null auto_increment,
Країна char(45) not null,
ID_спорту int not null,
primary key (ID_дисципліни),
constraint Дисципліна_Вид_спорту foreign key(ID_спорту)
references Олімпіада.Вид_спорту(ID_спорту) on delete no action
on update no action
);
create table Олімпіада.Люди (
ID_людини int not null auto_increment,
Прізвище char(45) not null,
Імя char(45) not null,
дата_народження date not null,
ID_країни int not null,
primary key (ID_людини),
constraint Люди_Країни foreign key(ID_країни)
references Олімпіада.Країни(ID_країни) on delete no action
on update no action
);
create table Олімпіада.Тренери (
ID_тренера int not null auto_increment,
ID_людини int not null,
ID_спорту int not null,
primary key (ID_тренера),
constraint Тренери_Люди foreign key(ID_людини)
references Олімпіада.Люди(ID_людини) on delete no action
on update no action
);
create table Олімпіада.Стадіони (
ID_стадіону int not null auto_increment,
Стадіон char(45) not null,
дата_відкриття date not null,
місткість int not null,
адреса char(45) not null,
primary key (ID_стадіону)
);
create table Олімпіада.Змагання (
ID_змагання int not null auto_increment,
ID_стадіону int not null,
ID_спорту int not null,
ID_дисципліни int not null,
primary key (ID_змагання),
constraint Змагання_Стадіони foreign key(ID_стадіону)
references Олімпіада.Стадіони(ID_стадіону) on delete no action
on update no action,
constraint Змагання_Дисципліна foreign key(ID_дисципліни)
references Олімпіада.Дисципліна(ID_дисципліни) on delete no action
on update no action,
constraint Змагання_Вид_спорту foreign key(ID_спорту)
references Олімпіада.Вид_спорту(ID_спорту) on delete no action
on update no action
);
create table Олімпіада.Спортсмени (
ID_спортсмена int not null auto_increment,
ID_людини int not null,
ID_спорту int not null,
ID_тренера int not null,
ріст int not null,
вага int not null,
primary key (ID_спортсмена),
constraint Спортсмени_Люди foreign key(ID_людини)
references Олімпіада.Люди(ID_людини) on delete no action
on update no action,
constraint Спортсмени_Вид_спорту foreign key(ID_спорту)
references Олімпіада.Вид_спорту(ID_спорту) on delete no action
on update no action,
constraint Спортсмени_Тренери foreign key(ID_тренера)
references Олімпіада.Тренери(ID_тренера) on delete no action
on update no action
);
create table Олімпіада.Медаль (
ID_медалі int not null auto_increment,
ID_змагання int not null,
ID_спортсмена int not null,
медаль enum('gold','silver','bronze'),
primary key (ID_медалі),
constraint Медаль_Спортсмени foreign key(ID_спортсмена)
references Олімпіада.Спортсмени(ID_спортсмена) on delete no action
on update no action,
constraint Медаль_Змагання foreign key(ID_змагання)
references Олімпіада.Змагання(ID_змагання) on delete no action
on update no action
);
Приклад заповнення таблиці
INSERT INTO олімпіада.дисципліна
values (1, '200 m complex',1),
(2, '100 m',2),
(3, '200 m',2),
(4, '60 kg',3),
(5, '66 kg',3),
(6, '75 kg',3),
(7, '96 kg',3),
(8, 'javelin throw',2),
(9, '400',2),
(10, '800',2),
(11, '1500',2),
(12, '400 m complex',1),
(13, '100 m bras',1),
(14, '200 m bras',1),
(15, '100 m butterfly',1),
(16, '200 m butterfly',1),
(17, 'long jump',2);
/
INSERT INTO олімпіада.країни
VALUES (1, 'USA'),
(2, 'Jamaica'),
(3, 'Ukraine'),
(4, 'Korea'),
(5, 'Cuba'),
(6, 'Hungry');
/
Зв’язки між таблицями:
/
Визначення часу виконання запиту:
Процедура для автозаповнення таблиці «Медаль»
delimiter //
create procedure input()
begin
Declare i integer;
Declare j integer;
Declare k integer;
set i = 1;
while (i < 18) do
set j = 1;
set k = 1;
while (j < 21) do
set k = 1;
while (k < 4) do
insert into Медаль(ID_змагання,ID_спортсмена,медаль) values(i, j , k);
set k = k + 1;
end while;
set j = j + 1;
end while;
set i = i + 1;
end while;
end;
//
Заповнена таблиця:
/
Запит:
select *from
спортсмени inner join медаль inner join змагання
on спортсмени.ID_спортсмена=медаль.ID_спортсмена
and змагання.ID_змагання=медаль.ID_змагання
Час виконання запиту(0.031 sec / 0.000 sec):
/
Висновок: Під час виконання лабораторної роботи ознайомилась із порядком, методами та засобами проектування і побудови сховища даних з корпоративною архітектурою та надала оцінку часу виконання запитів.