RDBMS Design
06/12/2011
Softjourn Inc.




RDBMS Design

  Anatoliy Okhotnikov
  Softjourn Inc.
Про що буде йти мова
●   Типи баз даних
●   Реляційні бази даних (OLTP)
●   Обробка транзакцій (ACID)
●   Database-centric архітектура
●   Моделювання даних. Узгодження іменування
●   Нормалізація та денормалізація
●   Індексування. Найкращі практики
●   Посилання. Питання та обговорення
Про що не буде йти мова
●   Нереляційні бази даних
●   OLAP/структури підтримки прийняття рішень
●   Інтенсивна теорія
●   Інтенсивна практика
Типи баз даних
•    Активна – event-driven, безпека статистика
•    Хмара – доступ через веб-браузер або API
•    Сховище – архів операційних, зовнішні дані
•    Розподілена – модульна, багато як одна
•    Документ-орієнтована – управління док-ами
•    Вбудована – інтегрована у програму
•    Федеративна(гетерогенна) – різні разом
•    Граф – варіант NoSQL із структурами графу
•    У-пам'яті – дуже швидка, знаходиться у пам'яті
•    Знань – для управління знаннями, по темам
•    Паралельна – покращення через паралелізацію

    Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Реляційні бази даних
• “A Relational Model of Data for
  Large Shared Data Banks”, стаття
  яку написав Edgar Frank "Ted"
  Codd працюючи дослідницький
  лабораторії IBM у San Jose.
• Обпублікована у
  “Communications of the ACM” у
  червні 1970 року
• Дослідницький проект Університету Каліфорнії
  у Берклі – Berkley Ingress (1973)


 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Реляційні: початок




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Реляційні: сьогодення




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Обробка транзакцій (ACID)




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Обробка транзакцій (ACID)
• Атомарність – результати транзакції або
  повністю виконані, або повінстю відмінені.
• Узгодженість(цілісність) – перетворення з
  одного вірного стану у інший вірний стан.
  Транзакція вірна якщо вона не порушує
  обмеження цілісності.
• Ізоляція – результати не видимі поки
  транзакція не завершена.
• Довговічність(надійність) – після завершення
  результати збережені у постійне сховище і
  переживають наступні збої системи та носія.

 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Database-centric архітектура
 Database- або data-centric
 архітектура, це архітектура ПЗ у
 якій база даних грає
 суттєву(центральну) роль.
    •    Стандартна RDMBS (RAD)
    •    Динамічна, table-driven логіка
    •    Використання stored procedures
    •    Shared DB як засіб IPC

Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Database vs Application centric




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Моделювання даних
     При моделюванні ви визначаєте наступне
•    Які елементи даних зберігати
•    Яким великим може бути кожен елемент
•    Яку інформацію може містити елемент
•    Які елементи можна залишити пустими
•    Які елементи обмежені певними рамками
•    Чи і як пов'язані різні таблиці між собою




    Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Моделювання даних
• Використовуйте
  візуальні
  інструменти
• Робіть реверс-
  інженіринг
  існуючої бази
• Перевіряйте та
  будуйте зв'язки
• Працюйте
  спільно

 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Узгодження іменування
• Joshua, Jana, John-David, Jill,
  Jessa, Jinger, Josiah, Joy-
  Anna, Jedidiah, Jeremiah,
  Jason, James, Justin, Jackson,
  Johannah, Jennifer
• Сім'я Duggar використовує
  узгодження іменування
• Погана ідея для сім'ї
• Гарна ідея для бази даних
• Немає певних правил, просто слідуйте власній
  угоді, яка вам зручна

 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Узгодження іменування — як?
• Оберіть одне і строго слідуйте йому:
  camelCase, PascalCase, under_scores і т.д.
• Чому?
    • Чистіший код
    • Логічні з'єднання
    • Психічне здоров'я вас та майбутніх
      розробників
• Явно називайте обмеження (constraints)
• Не використувуйте ключові слова як імена
  стовбців


 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Нормалізація
 Ключ, Повний ключ, і нічого крім
 ключа. Допоможи мені Кодде.




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Нормалізація та денормалізація
• Процес зміни дизайну бази даних
  для створення схеми таблиць у
  нормалній формі.
• Нормальні форми: 1NF, 2NF, 3NF,
  EKNF, BCNF, 4NF, 5NF, DKNF,
  6NF для OLTP (онлайн обробки
  транзакцій) швидкі із сталим
  станом
• NF2 або N1NF для OLAP(онлайн
  обробка аналітики) часто
  вимагає денормалізації для
  прискорення
 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Не нормалізований набір




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Нормалізований набір




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Навіщо нормалізувати?
• Запобігаємо дублюванню даних
• Дозволяємо користувачам робити
  власні зміни
• Запобігаємо аномальності даних
• Інструменти третіх сторін очікують
  нормалізовані дані
• Іноді треба де-нормалізовувати,
  але уникайте ранньої оптимізації

 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Індексування
 Знайдіть книжку Ван Пельта без
      каталогу. Будьласка.




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Типи індексів
• Unique – гарантує що ключ індексування є
  не містить дубльованих даних
• Full-text – використовується для
  індексування великої кількості тексту
• Included columns – дозволяє додати
  неключові стовбчики
• Indexed views – зберігає у базі,
  використовує оптимізатор
• XML – властивості, атрибути та елементи
• Filtered – фільт по існуючому індексу
• Spatial – геометричний або географічний
• Інші...
 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Індексування: основні ключі
         Основний ключ (primary key)
                    ==
             унікальний індекс




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Зауваження індексування: таблиці
 Цілочислений основний ключ у
 кожній таблиці


SELECT s.term, s.section_id, COUNT(penn_id)
FROM flat_section s JOIN flat_enrollment e
ON s.section_id = e.section_id AND s.term =
e.term GROUP BY s.term, s.section_id


Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Зауваження індексування: таблиці
• Чому цілочисельні ключі?
    • Вузькі індекси = більше індексних рядків на
      сторінку = меньше сторінок = меньше
      читань
    • Вузькі чисельні індекси = більш ефективні
      join'и
    • Можуть допомогти у відновленні після
      спотворення даних
    • Сурогатні (не з даних програми) ключі більш
      стійкі до майбутнього ніж натуральні ключі
        – Дозволяють зміну асоційованих полів
        – Не чутливі до зовнішніх змін даних
        – Більш гнучкі для майбутніх змін (архів)
 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Зауваження індексування: стовбці




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Зауваження індексування: стовбці
• Зєднання стовбців: індексовані
  цілочисельні значення – ти друг!
• Як стовбці використовуються у запитах?
• Відношення: 1-до-1, 1-до-багатьох,
  багато-до-багатьох
• Тип даних
• Індексування багатьох стовбців: в міру
• Ціль №1: швидкодія!
• Ціль №2: якнайменьший індексний файл

 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: типи даних
• Беріть до уваги
  довжину стовбчика
• Знайте необхідний
  рівень точності
• Залиште собі простір
  для росту
• Відповідність до дня,
  хвилини,
  мілісекунди?
 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: видалення
• Логічне проти фізичного




 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: навантажуйте базу
• Коли це має сенс – дозвольте
  базі працювати за вас
• Зовнішні ключі
• Унікальні індекси
• Перевірочні обмеження
• Обмеження за замовчуванням
• Трігери

 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: master tables
• Вони усюди:
    • Звіти
    • Інтерфейси
    • Пошуки
    • і т.д.

• Засіб для одночасного впровадження
  нормалізації та індексування
• Компоненти надійної мастер таблиці:
    • Сурогатні ключі
    • Внутрішній код/назва (не міняється)
    • Опис для публічного перегляду (міняється)
    • Дата створення та оновлення
 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: час жувати!
• “Тимчасові”
  проекти
• Балансуйте між
  сьогоднішнім
  прагматизмом та
  завтрашнім болем
• Робіть code review
  швидше
Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: експериментуйте
• Експерементуйте
  з вашою базою та
  запитами для
  покращення часу
  та планів
  виконання


Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Найкращі практики: будьте впевнені!
• Клопочіться про фідбек по дизайну бази,
  радше ніж по кодінг стандарту
• Питайте думку інших та діліться власними
  думками!
• Більше очей = кращий дизайн бази даних
• Більше ідей = кращий дизайн бази даних




 Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Гумор




Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Посилання
• http://en.wikipedia.org/wiki/Database
• http://db.cs.berkeley.edu/papers/fntdb07-
  architecture.pdf
• http://philip.greenspun.com/sql/index.html
• http://www.swegler.com/becky/blog/wp-
  content/uploads/2009/10/wcit-techtalk-database-
  design.pdf
• http://en.wikipedia.org/wiki/Database-
  centric_architecture
• http://michaeljswart.com/2011/01/ridiculously-
  unnormalized-database-schemas-part-one/
•
•Copyright © 2000-2011 Softjourn, Inc. All rights reserved
Питання та обговорення
 “Анатолій Охотніков”
 <aokhotnikov@softjourn.com>




Copyright © 2000-2011 Softjourn, Inc. All rights reserved

Db design (ukr)

  • 1.
  • 2.
    Softjourn Inc. RDBMS Design Anatoliy Okhotnikov Softjourn Inc.
  • 3.
    Про що будейти мова ● Типи баз даних ● Реляційні бази даних (OLTP) ● Обробка транзакцій (ACID) ● Database-centric архітектура ● Моделювання даних. Узгодження іменування ● Нормалізація та денормалізація ● Індексування. Найкращі практики ● Посилання. Питання та обговорення
  • 4.
    Про що небуде йти мова ● Нереляційні бази даних ● OLAP/структури підтримки прийняття рішень ● Інтенсивна теорія ● Інтенсивна практика
  • 5.
    Типи баз даних • Активна – event-driven, безпека статистика • Хмара – доступ через веб-браузер або API • Сховище – архів операційних, зовнішні дані • Розподілена – модульна, багато як одна • Документ-орієнтована – управління док-ами • Вбудована – інтегрована у програму • Федеративна(гетерогенна) – різні разом • Граф – варіант NoSQL із структурами графу • У-пам'яті – дуже швидка, знаходиться у пам'яті • Знань – для управління знаннями, по темам • Паралельна – покращення через паралелізацію Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 6.
    Реляційні бази даних •“A Relational Model of Data for Large Shared Data Banks”, стаття яку написав Edgar Frank "Ted" Codd працюючи дослідницький лабораторії IBM у San Jose. • Обпублікована у “Communications of the ACM” у червні 1970 року • Дослідницький проект Університету Каліфорнії у Берклі – Berkley Ingress (1973) Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 7.
    Реляційні: початок Copyright ©2000-2011 Softjourn, Inc. All rights reserved
  • 8.
    Реляційні: сьогодення Copyright ©2000-2011 Softjourn, Inc. All rights reserved
  • 9.
    Обробка транзакцій (ACID) Copyright© 2000-2011 Softjourn, Inc. All rights reserved
  • 10.
    Обробка транзакцій (ACID) •Атомарність – результати транзакції або повністю виконані, або повінстю відмінені. • Узгодженість(цілісність) – перетворення з одного вірного стану у інший вірний стан. Транзакція вірна якщо вона не порушує обмеження цілісності. • Ізоляція – результати не видимі поки транзакція не завершена. • Довговічність(надійність) – після завершення результати збережені у постійне сховище і переживають наступні збої системи та носія. Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 11.
    Database-centric архітектура Database-або data-centric архітектура, це архітектура ПЗ у якій база даних грає суттєву(центральну) роль. • Стандартна RDMBS (RAD) • Динамічна, table-driven логіка • Використання stored procedures • Shared DB як засіб IPC Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 12.
    Database vs Applicationcentric Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 13.
    Моделювання даних При моделюванні ви визначаєте наступне • Які елементи даних зберігати • Яким великим може бути кожен елемент • Яку інформацію може містити елемент • Які елементи можна залишити пустими • Які елементи обмежені певними рамками • Чи і як пов'язані різні таблиці між собою Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 14.
    Моделювання даних • Використовуйте візуальні інструменти • Робіть реверс- інженіринг існуючої бази • Перевіряйте та будуйте зв'язки • Працюйте спільно Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 15.
    Узгодження іменування • Joshua,Jana, John-David, Jill, Jessa, Jinger, Josiah, Joy- Anna, Jedidiah, Jeremiah, Jason, James, Justin, Jackson, Johannah, Jennifer • Сім'я Duggar використовує узгодження іменування • Погана ідея для сім'ї • Гарна ідея для бази даних • Немає певних правил, просто слідуйте власній угоді, яка вам зручна Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 16.
    Узгодження іменування —як? • Оберіть одне і строго слідуйте йому: camelCase, PascalCase, under_scores і т.д. • Чому? • Чистіший код • Логічні з'єднання • Психічне здоров'я вас та майбутніх розробників • Явно називайте обмеження (constraints) • Не використувуйте ключові слова як імена стовбців Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 17.
    Нормалізація Ключ, Повнийключ, і нічого крім ключа. Допоможи мені Кодде. Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 18.
    Нормалізація та денормалізація •Процес зміни дизайну бази даних для створення схеми таблиць у нормалній формі. • Нормальні форми: 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, 6NF для OLTP (онлайн обробки транзакцій) швидкі із сталим станом • NF2 або N1NF для OLAP(онлайн обробка аналітики) часто вимагає денормалізації для прискорення Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 19.
    Не нормалізований набір Copyright© 2000-2011 Softjourn, Inc. All rights reserved
  • 20.
    Нормалізований набір Copyright ©2000-2011 Softjourn, Inc. All rights reserved
  • 21.
    Навіщо нормалізувати? • Запобігаємодублюванню даних • Дозволяємо користувачам робити власні зміни • Запобігаємо аномальності даних • Інструменти третіх сторін очікують нормалізовані дані • Іноді треба де-нормалізовувати, але уникайте ранньої оптимізації Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 22.
    Індексування Знайдіть книжкуВан Пельта без каталогу. Будьласка. Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 23.
    Типи індексів • Unique– гарантує що ключ індексування є не містить дубльованих даних • Full-text – використовується для індексування великої кількості тексту • Included columns – дозволяє додати неключові стовбчики • Indexed views – зберігає у базі, використовує оптимізатор • XML – властивості, атрибути та елементи • Filtered – фільт по існуючому індексу • Spatial – геометричний або географічний • Інші... Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 24.
    Індексування: основні ключі Основний ключ (primary key) == унікальний індекс Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 25.
    Зауваження індексування: таблиці Цілочислений основний ключ у кожній таблиці SELECT s.term, s.section_id, COUNT(penn_id) FROM flat_section s JOIN flat_enrollment e ON s.section_id = e.section_id AND s.term = e.term GROUP BY s.term, s.section_id Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 26.
    Зауваження індексування: таблиці •Чому цілочисельні ключі? • Вузькі індекси = більше індексних рядків на сторінку = меньше сторінок = меньше читань • Вузькі чисельні індекси = більш ефективні join'и • Можуть допомогти у відновленні після спотворення даних • Сурогатні (не з даних програми) ключі більш стійкі до майбутнього ніж натуральні ключі – Дозволяють зміну асоційованих полів – Не чутливі до зовнішніх змін даних – Більш гнучкі для майбутніх змін (архів) Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 27.
    Зауваження індексування: стовбці Copyright© 2000-2011 Softjourn, Inc. All rights reserved
  • 28.
    Зауваження індексування: стовбці •Зєднання стовбців: індексовані цілочисельні значення – ти друг! • Як стовбці використовуються у запитах? • Відношення: 1-до-1, 1-до-багатьох, багато-до-багатьох • Тип даних • Індексування багатьох стовбців: в міру • Ціль №1: швидкодія! • Ціль №2: якнайменьший індексний файл Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 29.
    Найкращі практики: типиданих • Беріть до уваги довжину стовбчика • Знайте необхідний рівень точності • Залиште собі простір для росту • Відповідність до дня, хвилини, мілісекунди? Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 30.
    Найкращі практики: видалення •Логічне проти фізичного Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 31.
    Найкращі практики: навантажуйтебазу • Коли це має сенс – дозвольте базі працювати за вас • Зовнішні ключі • Унікальні індекси • Перевірочні обмеження • Обмеження за замовчуванням • Трігери Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 32.
    Найкращі практики: mastertables • Вони усюди: • Звіти • Інтерфейси • Пошуки • і т.д. • Засіб для одночасного впровадження нормалізації та індексування • Компоненти надійної мастер таблиці: • Сурогатні ключі • Внутрішній код/назва (не міняється) • Опис для публічного перегляду (міняється) • Дата створення та оновлення Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 33.
    Найкращі практики: часжувати! • “Тимчасові” проекти • Балансуйте між сьогоднішнім прагматизмом та завтрашнім болем • Робіть code review швидше Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 34.
    Найкращі практики: експериментуйте •Експерементуйте з вашою базою та запитами для покращення часу та планів виконання Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 35.
    Найкращі практики: будьтевпевнені! • Клопочіться про фідбек по дизайну бази, радше ніж по кодінг стандарту • Питайте думку інших та діліться власними думками! • Більше очей = кращий дизайн бази даних • Більше ідей = кращий дизайн бази даних Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 36.
    Гумор Copyright © 2000-2011Softjourn, Inc. All rights reserved
  • 37.
    Посилання • http://en.wikipedia.org/wiki/Database • http://db.cs.berkeley.edu/papers/fntdb07- architecture.pdf • http://philip.greenspun.com/sql/index.html • http://www.swegler.com/becky/blog/wp- content/uploads/2009/10/wcit-techtalk-database- design.pdf • http://en.wikipedia.org/wiki/Database- centric_architecture • http://michaeljswart.com/2011/01/ridiculously- unnormalized-database-schemas-part-one/ • •Copyright © 2000-2011 Softjourn, Inc. All rights reserved
  • 38.
    Питання та обговорення “Анатолій Охотніков” <aokhotnikov@softjourn.com> Copyright © 2000-2011 Softjourn, Inc. All rights reserved