Спецкурс 2014, занятие 6. Базы данных

46
Спецкурс ОмГУ2014 Базы данных Занятие 6

description

Спецкурс в ОмГУ, 2014 г.

Transcript of Спецкурс 2014, занятие 6. Базы данных

Page 1: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Базы  данных  

Занятие  6    

Page 2: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

База  данных  –  определений  много,  в  основном,  по  признакам  (логическая  связанность,  обработка  на  ЭВМ  и  т.д.)    

Определения    

Page 3: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Система  управления  базами  данных  (СУБД)  –  программная  система  для  создания  и  управления  базами  данных  

Определения    

Page 4: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Виды  баз  данных  (по  модели):  1.  реляционные  2.  иерархические  3.  сетевые  4.  объектные  5.  объектно-­‐реляционные    

Определения      

Page 5: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Реляционная  модель  –  модель,  основанная  на  реляционной  алгебре  (алгебра  отношений  на  кортежах)    

Определения    

Page 6: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Примеры  реляционных  СУБД:  1.  Oracle  2.  Postgres  3.  MySQL  4.  MS  SQL  5.  SQLite    

Определения      

Page 7: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Схема  реляционной  БД:  1.  Таблицы  –  физическое  представление  отношений  (столбцы  –  атрибуты,  строки  –  кортежи)    

Реляционные  БД      

Page 8: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Схема  реляционной  БД:  2.  Внешние  файлы  –  для  больших  объемов  данных  (чаще  бинарных)    3.  Индексы  –  уникальные,  поисковые  4.  Ограничения  -­‐  первичные  и  внешние  ключи,  формульные      

Реляционные  БД      

Page 9: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Программный  код  в  реляционных  СУБД:  1.  Триггеры  –  для  реакции  на  события  2.  Хранимые  процедуры  и  функции  –  произвольные  алгоритмы  обработки  данных    

Реляционные  БД      

Page 10: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Первичный  ключ  (primary  key):  основной  ключ  таблицы,  уникальный  как  следствие,  может  быть  простым  и  составным  (несколько  столбцов)  

Реляционные  БД      

Page 11: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Внешний  ключ  (foreign  key):  столбцы  таблицы,  значения  которых  являются  подмножеством  первичного  ключа  другой  таблицы  

Реляционные  БД      

Page 12: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Нормальная  форма:  набор  свойств  отношений,  для  обеспечения  целостности  данных  (1-­‐НФ,  2-­‐НФ,  3-­‐НФ  –  самая  распространенная)  

Реляционные  БД      

Page 13: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Department:  id  name  

Пример  БД  в  3-­‐й  нормальной  форме      

Page 14: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Group:  id  name  department_id  

Пример  БД  в  3-­‐й  нормальной  форме      

Page 15: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Chair:  id  name  department_id  

Пример  БД  в  3-­‐й  нормальной  форме      

Page 16: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Student:  id  first_name  last_name  group_id  chair_id  

Пример  БД  в  3-­‐й  нормальной  форме      

Page 17: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Денормализация  –  снижение  уровня  нормализации,  как  правило  с  целью  повышения  производительности  (чаще  всего  уход  от  3-­‐НФ)  

Денормализация  БД      

Page 18: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Student:  id  first_name  last_name  group_id  chair_name  department_name  

Денормализация  БД      

Page 19: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Минус  денормализации  –  нужно  тщательнее  следить  за  целостностью  и  непротиворечивостью  данных  

Денормализация  БД      

Page 20: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Structured  query  language  (SQL)  –  язык  написания  запросов  к  реляционной  БД    

SQL    

Page 21: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Варианты  SQL:  1.  ANSI  SQL    2.  Oracle-­‐диалект  (Oracle  SQL)  3.  Postgres-­‐диалект  4.  MySQL-­‐диалект    

SQL      

Page 22: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Data  descripcon  language  (DDL):  1.  create/drop  –  database,  table,  index,  constraint    2.  alter  –  database,  table,  index,  constraint    

SQL      

Page 23: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Все  дальнейшие  примеры  для  выполнения  на  MySQL  5.x  

Реляционные  БД      

Page 24: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Создание  БД:  create  database  `omsu`  character  set  u�8  collate  u�8_general_ci;      

SQL      

Page 25: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Таблица  «Факультет»:    create  table  `Department`(                  id  int(20)  not  null,                  name  varchar(50)  not  null,                  primary  key(id)  )  engine=InnoDB  character  set=u�8;    

SQL      

Page 26: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Индекс  на  таблицу  «Факультет»:    create  unique  index  `Department_unique`  on  Department(name);    

SQL      

Page 27: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Таблица  «Группа»:    create  table  `Group`(                  id  int(20)  not  null,                  name  varchar(50)  not  null,                  department_id  int(20)  not  null,                  primary  key(id),                  foreign  key  (department_id)  references                                  Department(id)  )  engine=InnoDB  character  set=u�8;    

SQL      

Page 28: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Индекс  на  таблицу  «Группа»:    create  unique  index  `Group_unique`  on  Group(department_id,  name);    

SQL      

Page 29: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Data  modeling  language  (DML):  1.  insert/update/delete  –  модификация  данных    2.  select  –  построение  множества  кортежей  по  декларативному  запросу  (query)    

SQL      

Page 30: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Вставка  в  таблицу  «Факультет»:    insert  into  Department(id,  name)  values                (1,  ‘ИМИТ’),                (2,  ‘Физический’);    

SQL      

Page 31: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Вставка  в  таблицу  «Группа»:    insert  into  Group(id,  name,  department_id)  values                  (1,  ‘ММ-­‐01’,  1),                  (2,  ‘Ф-­‐05-­‐О’,  2),                  (3,  ‘МП-­‐01’,  1);    

SQL      

Page 32: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Запрос  к  таблице  «Факультет»:    select  name  from  Department;    ИМИТ  Физический    

SQL      

Page 33: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Запрос  к  таблице  «Группа»:    select  g.*  from  Group  g  inner  join  Department  d                    on  g.department_id  =  d.id  where  d.name  =  ‘ИМИТ’;    1,  ММ-­‐01  3,  МП-­‐01    

SQL      

Page 34: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Структура  запроса:  select  <описание  кортежа>  from  <список  таблиц>  [where  <условия  на  исходные>]  [group  by  <список  столбцов>]  [having  <условия  на  группировку>]]  [order  by  <список  столбцов>]  

SQL      

Page 35: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Пример:  select  d.name,  count(g.id)  from  Group  g  inner  join  Department  d                    on  g.department_id  =  d.id  where  d.name  like  ‘%И%’  group  by  d.name  having  count(g.id)  >  1  order  by  d.name;    ИМИТ,  2    

SQL      

Page 36: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Соединение  таблиц  –  получение  декартова  произведения  таблиц,  ограниченного  условием  соединения  

Соединения    

Page 37: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Пример:    select  *  from  Group  g,  Department  d  where  g.department_id  =  d.id;    1,  ММ-­‐01,  1,  ИМИТ  2,  ФФ-­‐01-­‐О,  2,  Физический  3,  МП-­‐01,  1,  ИМИТ    

Соединения      

Page 38: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Алгоритмы  соединения  таблиц:  1.  вложенными  циклами  (nested  loops)  –  самый  универсальный  2.  хэшированием  3.  слиянием  сортированных  списков    

Соединения      

Page 39: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Виды  соединений:    1.  внутреннее  –  inner  join  2.  внешнее  –  outer  join      2.1  левое  –  le;  join      2.1  правое  –  right  join      2.3  полное  –  full  join  3.  перекрестное  –  cross  join  (то  же,  что  ‘,’  в  примере  выше)    

Соединения      

Page 40: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Пример:    select  c.name  from  Student  s  right  join  Chair  c                  on  s.chair_id  =  c.id  where  s.chair_id  is  null;    При  отсутствии  нужной  строки  в  таблице  «Студент»,  на  ее  месте  будет  кортеж  из  null  

Соединения      

Page 41: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Подзапрос:  вложенный  запрос  в  другом  запросе,  может  быть  внутри  любого  DML-­‐оператора    

Подзапросы      

Page 42: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Результат  подзапроса  в  where  используется:  1.  в  операциях  сравнения  (скаляр)  2.  принадлежность/не  принадлежность  кортежа  множеству  –  in/not  in  3.  непустота/пустота  множества  –  exists/not  exists    

Подзапросы      

Page 43: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Пример:    select  c.name  from  Chair  c  where  not  exists  (                    select  null                    from  Student  s                    where  s.chair_id  =  c.id  );  

 Подзапросы      

Page 44: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Операции  с  результатами  запросов:  1.  dis=nct  –  исключение  повторов  2.  union  [all]  -­‐  объединение  3.  intersect  –  пересечение  4.  except  –  исключение  строк  2-­‐го  множества  из  1-­‐го  

Подзапросы      

Page 45: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Для  дальнейшего  изучения:  1.  хорошие  упражнения  по  SQL  2.  хорошие  лекции  по  БД  

Подзапросы      

Page 46: Спецкурс 2014, занятие 6. Базы данных

Спецкурс  ОмГУ-­‐2014  

Email:  [email protected]  Skype:  anna_tarasenko  Web:  7bits.ru  

Вопросы?