Professional Documents
Culture Documents
Лекція 14
Лекція 14
БД
СКБД
автономність (незалежність)
1) з БД працює тільки одна людина
2) складно обновляти при великій кількості
користувачів
3) практично неможливо “стикувати” зміни, які
вносять різні користувачі
Файл-серверні ІС
СКБД БД
СКБД
СКБД СКБД
запит
СКБД-клієнт
на SQL
відповідь
СКБД-клієнт
поля
записи
Прізвище Ім'я Адреса Телефон
Петров Вася Шевченка пл., б. 32, кв. 11 275-75-75
Іванов Петро Франка вул., б. 25, кв.12 276-76-76
1) найпростіша структура
2) всі інші типи БД використовують таблиці
в багатьох випадках – дублювання даних:
Т.Г. Шевченко Кобзар 540 ст.
Т.Г. Шевченко Гайдамаки 45 ст.
Табличні БД
1. Кількість полів визначається розробником і не може змінюватися
користувачем.
2. Будь-які поля повинні мати унікальне ім'я.
3. Поля можуть мати різний тип:
• рядок символів (довжиною до 255 символів)
• дійсне число (з дробовою частиною)
• ціле число
• грошова сума
• дата, час, дата і час
• логічне поле (істина або хибність, так або ні)
• багатосторінковий текст (МЕМО)
• малюнок, звук або інший об'єкт (об'єкт OLE)
4. Поля можуть бути обов'язковими для заповнення або ні.
5. Таблиці можуть містити скільки завгодно записів (ця кількість
обмежується тільки об'ємом диску); записи можна добавляти, вилучати,
редагувати, сортувати, шукати.
Ключове поле (ключ таблиці)
Ключове поле (ключ) – це поле (або комбінація полів),
які однозначно визначають запис.
В таблиці не може бути двох записів з однаковими
значеннями ключа.
Чи можуть дані поля бути ключем?
• прізвище
• ім'я
• номер паспорта
• номер будинку
• реєстраційний номер автомобіля
• пункт проживання
• дата виконаних робіт
• марка пральної машини ?
Мережеві БД
Мережева БД – це набір вузлів, в яких кожен може бути
зв'язаний з кожним.
А
Г Б
В
найповніше відображає структуру деяких задач
(наприклад, мережеве планування в економіці)
1) складно зберігати і шукати інформацію в усіх зв'язках
2) заплутаність структури
1) дублювання даних
2) при зміні адреси фірми потрібно міняти її в усіх
рядках
3) немає захисту від помилок введених оператором
(Іван – Іванн), краще було б вибрати із списку
Реляційні БД
1970-і рр. Е. Кодд, англ. relation – відношення.
Реляційна база даних – це набір простих таблиць, між якими
встановлені зв'язки (відношення) з допомогою числових кодів.
Виробник
Продавці
Прайс-лист Код
Код
Код запису Назва
Назва
Код продавця Країна
Адреса
Код виробника Сайт
Телефон
Код товару
Сайт
Код моделі
Ціна
Товари Моделі
Код Код
Назва Назва
Код виробника
Реляційні БД
1) немає дублювання інформації;
2) при зміні адреси фірми, достатньо змінити її тільки в
таблиці Продавці;
3) захист від неправильного введення: можна вибирати
тільки фірму, яка заздалегідь введена в таблицю
Продавці;
4) механізм транзакції: будь-які зміни вносяться в базу
тільки тоді, коли вони повністю завершені.
Ціна за Кількість,
Код Товар Вартість
тонну тонн
1 Банани 240 10 2400
2 Киви 300 20 6000
…
Пошук в базі даних
Лінійний пошук – це перебір всі записів до тих пір, поки не
буде знайдений потрібний.
Код Прізвище
1 Сидоров Іванов?
2 Вєтров
… 1024 порівняння!
1024 Помаранський
швидкий пошук
1) записи потрібно відсортувати по відповідному полю;
2) можна використовувати тільки для одного поля.
Пошук по індексах
Індекс – це допоміжна таблиця, яка призначена для
швидкого пошуку в основній таблиці по обраному
стовпчику.
Таблиця
Номер Дата Товар Кількість
1 02.02.2006 Ківі 6
2 01.11.2006 Банани 3
3 12.04.2006 Апельсини 10
Індекси:
по даті по товару по кількості
Номер Дата Номер Товар Номер Количество
1 02.02.2006 3 Апельсини 2 3
3 12.04.2006 2 Банани 1 6
2 01.11.2006 1 Ківі 3 10
Пошук по індексах
Алгоритм пошуку:
1) двійковий пошук по індексу – знайти номер
потрібних записів;
2) вибрати ці записи по номерам із основної таблиці.
- Витягти дані з БД
- Створити табоицю і т.п.
Для створення нової бази даних використовується наступна команда:
Наприклад:
USE ім’я_БД;
Наприклад:
USE users;
Наприклад:
Наприкад:
Наприклад:
DESCRIBE data;
Наприклад:
SELECT * FROM users_data;
Вибір певних полів:
Сортування:
Наприклад:
Якщо ми хочемо вивести всі альбоми, які були випущені в проміжку між 1975 і 1985 роком,
ми можемо використовувати такий запис:
Також, якщо ми хочемо вивести всі альбоми, в назві яких є буква 'R', ми можемо
використовувати такий запис:
UPDATE tv_series
SET genre = 'drama'
WHERE name = 'Game of Thrones';
Видалення запису з таблиці через SQL - дуже проста операція.
Все, що потрібно - це позначити, що саме ми хочемо видалити.
•connect() - створення з’єднання з базою даних. Виклик цієї функції може включати в
себе аргументи, на зразок, імені користувача, пароля, адреси сервера та ін.
Робота з базою даних починається з виклику connect() для встановлення з’єднання з локальним
файлом бази даних, який треба створити або використовувати.
Для прикладу, створимо базу даних first_year.db. База даних буде містити таблицю studing з
інформацією про предмети, лекції та практики за перший рік навчання. У таблицю будуть
входити такі поля:
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
curs.execute('''CREATE TABLE studing (id INT PRIMARY KEY,
discipline VARCHAR(20),
lec_num INT,
lab_num INT,
points FLOAT)''')
conn.commit()
curs.close()
conn.close()
Почнемо заповнювати таблицю
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
curs.execute('INSERT INTO studing VALUES(1, "Maths", 12, 18, 2.5)')
curs.execute('INSERT INTO studing VALUES(2, "Physics", 16, 12, 3.5)')
conn.commit()
curs.close()
conn.close()
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
ins = 'INSERT INTO studing (id, discipline, lec_num, lab_num, points) VALUES(?, ?, ?, ?, ?)'
curs.execute(ins, (3, 'Programming', 18, 8, 5.0))
ins = 'INSERT INTO studing (id, discipline, lec_num, lab_num, points) VALUES(?, ?, ?, ?, ?)'
curs.execute(ins, (4, 'IttS', 12, 8, 5.5))
conn.commit()
curs.close()
conn.close()
Цього разу у запиті використовувалися п’ять знаків ?, щоб показати, що планується додати п’ять значень,
а потім додати ці значення списком у функцію execute().
Заповнювачі полегшують розставлення лапок і захищають від SQL-ін’єкцій.
SQL ін’єкція - зовнішня атака, поширена в мережі Інтернет, яка впроваджує у систему шкідливі команди
SQL.
Також в запиті можна використовувати імена змінних з префіксом :.
У цьому випадку у запиті слід передати відповідний словник зі значеннями, які вставляються у базу
даних, і ключами, що є іменами цих змінних:
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
curs.execute("INSERT INTO studing (id, discipline, lec_num, lab_num, points)
VALUES (:idst, :discst, :lecst, :labst, :pointst)",
{"idst": 5, "discst": "Electronics", "lecst": 15, "labst":10, "pointst": 4.5})
conn.commit()
curs.close()
conn.close()
Тепер перевіримо, чи зможемо ми отримати список наших предметів
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
curs.execute('SELECT * FROM studing')
conn.commit()
rows = curs.fetchall()
print(rows)
curs.close()
conn.close()
В результаті отримаємо:
Також можна у циклі пройти по рядкам об’єкта курсору
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
curs.execute('SELECT * FROM studing')
conn.commit()
for row in curs:
print(row)
curs.close()
conn.close()
import sqlite3
conn = sqlite3.connect('first_year.db')
curs = conn.cursor()
curs.execute('UPDATE studing SET lab_num = 16 WHERE id = 3')
conn.commit()
curs.execute('SELECT * FROM studing WHERE id = 3')
for row in curs:
print(row)
curs.close()
conn.close()