prompter: Чим реляційні бази даних відрізняються від нереляційних? Які між ним є переваги і недоліки?

assistant: Реляційна база даних є структурованою, тобто дані організовані в таблицях. Часто дані в цих таблицях мають зв’язки один з одним або залежності. Нереляційна база даних є документоорієнтованою, тобто вся інформація зберігається в порядку списку.

Переваги реляційних баз даних:
- Чудово підходить для структурованих даних
- Чудово підходить для складних запитів
- Зручна навігація за даними
- Високий рівень інтеграції даних завдяки зв’язкам і обмеженням між таблицями
- Транзакції безпечні

Недоліки реляційних баз даних:
- Попереднє визначення схеми
- Немає адаптації до мінливих вимог: динамічні зміни елемента впливають на всі інші елементи в одній таблиці
- Обробка даних може бути повільною. Висока продуктивність можлива за допомогою дорогого обладнання

А тепер, я напишу про переваги та недоліки нереляційних БД.

Переваги нереляційних баз даних
- Гнучка модель даних
- Швидка адаптація до мінливих вимог: динамічні зміни елемента не впливають на інші елементи
- Зберігання величезної кількості неструктурованих даних 
- Висока ефективність

Недоліки нереляційних баз даних
- Важко перевірити цілісність і послідовність даних

prompter: Якщо в нереляцяйній базі знаходяться різні неструктуровані дані, як робити до них запити?

assistant: Парадоксально, але неструктуровані дані потребують певного базового рівня структури, перш ніж їх можна буде правильно проаналізувати. У деяких неструктурованих базах даних дані потрібно аналізувати шляхом витягнення (extraction).

Уявіть, що ви хочете запустити розпізнавання обличчя на фотографії. Спочатку ви повинні нанести на карту ключові контрольні точки, щоб створити ряд вимірювань (відстань між очима, ширина рота тощо). Потім цю карту можна використовувати для порівняння з ключовими точками з інших фотографій, доки ви не знайдете приклад того, де вимірювання потрапляють у прийнятні межі допуску.

Насправді ви застосували до файлу структуру, яка дозволяє порівнювати та аналізувати. Деякі бази, такі як-от MongoDB допомагають прискорити цей процес, застосовуючи «напівструктуру» до наборів даних під час їх зберігання. Усі оригінальні метадані зберігаються в документі NoSQL JSON, а додаткова напівструктура прискорює пошук і аналіз.

prompter: А чи можна json зберігати в реляційній базі даних? Які недоліки можуть бути?

assistant: JSON можна зберігати в реляційних БД. Наприклад, MySQL має підтримку типу JSONB, що зберігає дані JSON у таблиці у бінарному форматі. PostgreSQL має нативну підтримку як JSON, так і JSONB.

Одним з недоліків можна вважати те, що планувальник запитів БД має кращу інформацію про оптимізацію під час перегляду стовпців таблиці, ніж під час перегляду ключів у документі JSON. Інший недолік - доступ до глибоко вкладених елементів JSON може бути повільним, якщо даних багато.

assistant: Якщо ви маєте на увазі неструктуровані дані типу JSON, то деякі бази мають альтернативні до SQL мови запитів.
Синтаксис цих мов враховує динамічність - що поля можуть існувати не у всіх документах / рядках.

prompter: А як робити пошук по JSON , до прикладу,в PostgreSQL?

assistant: Вас цікавить отримання конкретного поля, чи загалом пошук певної стрічки по тексту JSON?

assistant: Реляційна база даних або система управління реляційною базою даних (RDMS) зберігає інформацію в таблицях. Часто ці таблиці мають спільну інформацію між собою, спричиняючи формування зв’язку між таблицями. Саме звідси реляційна база даних отримала свою назву.

У таблиці використовуються стовпці для визначення інформації, що зберігається, і рядки для фактичних даних. Кожна таблиця матиме стовпець, який повинен мати унікальні значення, відомий як первинний ключ. Потім цей стовпець можна використовувати в інших таблицях, якщо між ними потрібно визначити зв’язки. Коли первинний ключ однієї таблиці використовується в іншій таблиці, цей стовпець у другій таблиці називається зовнішнім ключем.

Найпоширенішим способом взаємодії з системами реляційних баз даних є використання SQL (мова структурованих запитів).

Якщо ви створюєте проект, у якому дані є передбачуваними з точки зору структури, розміру та частоти доступу, реляційні бази даних залишаються найкращим вибором. Реляційні бази даних також є найкращим вибором, якщо зв’язки між сутностями важливі.


Нереляційна база даних, яку іноді називають NoSQL, - це будь-яка база даних, яка не використовує концепцію структурованих даних таблиць, полів і стовпців із реляційних баз даних. Нереляційні бази даних були розроблені з урахуванням особливостей cloud, що робить їх чудовими для горизонтального масштабування.

Існує кілька різних груп типів баз даних, які зберігають дані різними способами:

- Бази даних документів

Бази даних документів зберігають дані в документах, які зазвичай є структурами, подібними до JSON, які підтримують різні типи даних. Ці типи включають рядки; такі числа, як int, float і long; дати; об'єкти; масиви; і навіть вкладені документи. Дані зберігаються парами, подібно до пар ключ/значення.

- База даних ключ-значення

Це найпростіший тип бази даних, де інформація зберігається у двох частинах: ключ і значення. Потім ключ використовується для отримання інформації з бази даних.

Простота бази даних ключ-значення також є перевагою.  Оскільки все зберігається як унікальний ключ і значення, яке є або даними, або розташуванням для даних, читання та запис завжди будуть швидкими.

Однак ця простота обмежує тип випадків використання, для яких він може використовуватися. Більш складні вимоги до даних не підтримуються.

- Графові бази даних

Графові бази даних є найбільш спеціалізованими з типів нереляційних баз даних. Вони використовують структуру елементів, які називаються вузлами, які зберігають дані, а ребра між ними містять атрибути про зв’язок.

Зв’язки визначені по ребрах графу, що робить пошук, пов’язаний із цими зв’язками, природно швидким. Крім того, вони гнучкі, оскільки можна легко додавати нові вузли та ребра. Вони також не повинні мати визначену схему, як традиційна реляційна база даних.

Однак вони не дуже підходять для запитів до всієї бази даних, де зв’язки визначені не так добре або зовсім не визначені. Вони також не мають стандартної мови для запитів, що означає, що перехід між різними типами графових баз даних вимагає навчання.

- Широко-стовпцеві бази даних

Бази даних із широкими стовпцями (wide-column), подібно до реляційних баз даних, зберігають дані в таблицях, стовпцях і рядках. Однак назви та форматування стовпців не обов’язково збігаються в кожному рядку.  Стовпці навіть можна зберігати на кількох серверах.  Вони вважаються двовимірними сховищами ключ-значення, оскільки вони використовують багатовимірне відображення для посилань на дані за рядками та стовпцями.

Як і бази даних із двома стовпцями, база даних із широкими стовпцями має перевагу гнучкості, тому запити виконуються швидко. Завдяки цій гнучкості вони добре справляються з «великими даними» та неструктурованими даними.

Однак, порівняно з реляційними базами даних, бази даних із широким стовпцем набагато повільніше обробляють транзакції. Стовпці групують разом подібні атрибути, а не використовують рядки, і зберігають їх в окремих файлах, що означає, що транзакції повинні виконуватися в кількох файлах.

prompter: Розкажи мені про типи індексів у реляційних БД

assistant: Існують такі види індексів у реляційних БД:
- bitmap (індекс мап бітів)
- dense (щільний індекс) 
- sparse (розріджений індекс)
- reverse (зворотний індекс)
- primary (основний індекс)
- secondary (вторинний індекс)

Вам потрібне більш детальне пояснення кожного з них?