У чому різниця між реляційною та нереляційною базою даних?


82

Я знаю, що рішення, такі як MySQL, PostgreSQL та MS SQL Server, є реляційними системами баз даних, а NoSQL, MongoDB тощо - нереляційними СУБД.

Однак у чому різниця між двома типами систем?

Необов'язкові терміни є кращими.

Дякую.


11
Це не домашнє завдання ... але сьогодні я намагався пояснити відмінності другові, і я почав виходити пустим. Тож я вирішив, що шукатиму тут і не знайшов жодних задовільних пояснень. Тож придумав, що я запитаю. Різниця, про яку я говорив, полягає в тому, що з RDBMS існує безліч таблиць та об'єднань між таблицями. NoSQL не має декількох таблиць, він має лише одну таблицю і використовує пари значень ключів. Не впевнений, що це точний опис, тому я вирішив, що запитаю.
marcamillion

Я знайшов ці відповіді без користі, оскільки вони проводять занадто багато часу, говорячи про те, наскільки складним є питання, фактично не відповідаючи на запитання. Після прочитання цього допису в блозі я вважаю, що основна ідея полягає в тому, що nosql краще масштабує DBL, ніж sql, тобто розподіляється при масштабуванні, тобто більше обчислювальної потужності на одній машині більше не є варіантом jamesserra.com/archive/2015/08/…
mbigras

Відповіді:


23

Реляційні бази даних мають математичну основу (теорія множин, реляційна теорія), які переносяться в SQL == Структурована мова запитів.

Багато форм NoSQL (наприклад, на основі документів, графіків, об’єктів, сховищ ключових значень тощо) можуть або не базуватися на одній підґрунтя математичної теорії. Як правильно зазначив С. Лотт, ієрархічні сховища даних справді мають математичну основу. Те саме можна сказати про бази даних графіків .

Я не знаю універсальної мови запитів для баз даних NoSQL.


"не мають такої математичної основи"? Справді? Ієрархічні бази даних здалися мені досить математичними. Для порівняння вони також були відносно простими. Я думаю, що люди з бази даних XML мають досить надійний замок щодо того, що можна (і що не можна) робити в ієрархічній базі даних.
S.Lott,

Це може бути моє незнання чи надмірне спрощення в роботі тут, С. Лотт. Шукатиму довідку.
duffymo

1
Я не фахівець у цьому питанні, але оскільки всі вони структуровані datastires, я вважаю, що принаймні підмножина SQL може бути застосована до будь-якої моделі. Щодо цього, мені насправді подобається, як Google розкрив мову запитів, яка відповідає SQL для їхньої великої таблиці code.google.com/appengine/docs/python/datastore/… . Дійсно, набагато простіше.
Філіп Дупанович

43

Хм, не зовсім впевнений, у чому ваше питання.

У заголовку ви запитуєте про бази даних (СУБД), тоді як у тілі тексту ви запитуєте про системи управління базами даних (СУБД). Ці два абсолютно різні і вимагають різних відповідей.

СУБД - це інструмент, який дозволяє отримати доступ до СУБД.

Крім самих даних, БД - це концепція того, як ці дані структуровані.

Так само, як ви можете програмувати за методологією Oriented Object із компілятором, що не працює на основі ОО, або навпаки, так ви можете налаштувати реляційну базу даних без СУБД або використовувати СУБД для зберігання нереляційних даних.

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

Реляційна база даних (концепція) - це структура даних, яка дозволяє зв’язувати інформацію з різних „таблиць” або різних типів сегментів даних. Відро даних має містити те, що називається ключем або індексом (що дозволяє однозначно ідентифікувати будь-який атомний шматок даних у сегменті). Інші сегменти даних можуть посилатися на цей ключ, щоб створити зв'язок між їх атомами даних та атомом, на який вказує ключ.

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

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

Я сподіваюся, що це достатньо непрофесійні умови і корисно для вашого розуміння.


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

Для використання реляційної бази даних не потрібно знати про обмеження, декларувати будь-які або такі, що їх потрібно декларувати (включаючи ПК, ПК та ФК). Вони за цілісність. Таблиці представляють відношення (корабель). Оператори Join та інші оператори з'єднують таблиці, щоб отримати нові таблиці, відношення яких (ship) є поєднаннями відносин таблиць аргументів (ship). Також індекси призначені для оптимізації реалізації та не мають значення для бази даних / СУБД, яка має відношення до своїх користувачів.
philipxy

22

Більшість із того, що ви «знаєте», є неправильним.

Перш за все, як зазначають деякі з реляційних гуру (а іноді і наполегливо), SQL насправді не наближається до реляційної теорії приблизно так, як думають багато людей. По-друге, більшість відмінностей у матеріалі "NoSQL" відносно мало пов'язані з тим, є це реляційними чи ні. Нарешті, досить важко сказати, чим "NoSQL" відрізняється від SQL, оскільки обидва вони представляють досить широкий спектр можливостей.

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

Зверніть увагу , що ці види речей також гарантовано відбудеться атомарному, так що якщо хто - то ще дивиться на базу даних , як ви додаєте людини, вони або не побачити людину взагалі, або вони будуть бачити людину з адреса (або матері тощо)

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


9

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

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

Ми можемо погодитися на дві речі, які відповідають кожній СУБД: вона може зберігати будь-який тип даних і має достатню кількість математичних підстав, щоб зробити можливим управління даними будь-яким можливим способом. Реальність така, що ви ніколи не захочете помилитися, поставивши будь-який із двох пунктів на тест, а просто дотримуйтесь того, для чого насправді створена СУБД. Якщо говорити неспеціалістами: поважайте звіра всередині!

(Зверніть увагу, що я уникав порівняння (очевидно) обгрунтованих стандартів, що обертаються навколо реляційної моделі, з багатьма варіантами, що надаються базами даних NoSQL. Якщо хочете, розгляньте бази даних NoSQL як загальний термін для будь-якої СУБД, яка не повністю припустимо реляційну модель, виключаючи все інше. Відмінностей занадто багато, але це основна різниця, і та, яка, на мою думку, була б для вас найбільш корисною для розуміння двох.)


6

Спробуйте пояснити це питання на рівні, що стосується трохи технологій

Візьмемо для порівняння MongoDB та традиційний SQL, уявіть сценарій розміщення твіту в Twitter. Цей твіт містить 9 фотографій. Як ви зберігаєте цей твіт та відповідні фотографії?

З точки зору традиційних відносин SQL, ви можете зберігати твіти та зображення в окремих таблицях і представляти зв'язок за допомогою побудови нової таблиці.

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

Використовуючи MongoDB, ви можете створити такий документ (подібний до концепції таблиці в реляційному SQL):

{

"id":"XXX",

"user":"XXX",

"date":"xxxx-xx-xx",

"content":{

"text":"XXXX",

"picture":["p1.png","p2.png","p3.png"]

}

Тому, на мій погляд, основна відмінність полягає в тому, як ви зберігаєте дані та рівні зберігання відносин між ними.

У цьому прикладі даними є твіт та зображення. Різний механізм щодо рівня зберігання відносин між ними також відіграє важливу роль у різниці між ними.

Сподіваюся, цей невеликий приклад допоможе показати різницю між SQL та NoSQL (ACID та BASE).

Ось посилання на зображення про цілі NoSQL з Інтернету:

http://icamchuwordpress-wordpress.stor.sinaapp.com/uploads/2015/01/dbc795f6f262e9d01fa0ab9b323b2dd1_b.png


дуже гарне пояснення, є посилання, де я отримав першу ідею, я сподіваюся, це може комусь допомогти. growthefuturenow.com/relational-vs-non-relational-database
Мухаммад Садік

4

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

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

Якщо ви не застосуєте цього обмеження у програмі інтерфейсу, яка використовується для заповнення таблиць баз даних, ви впроваджуєте безлад, який можна порівняти з Диким Заходом.


1

Спочатку дозвольте мені почати з того, що нам потрібна база даних.

Нам потрібна база даних, яка допоможе організувати інформацію таким чином, щоб ми могли ефективно отримувати ці дані.

Приклади реляційних систем управління базами даних (SQL):

1) База даних Oracle

2) SQLite

3) PostgreSQL

4) MySQL

5) Microsoft SQL Server

6) IBM DB2

Приклади нереляційних систем управління базами даних (NoSQL)

1) MongoDB

2) Кассандра

3) Редіс

4) Кушетка

5) HBase

6) DocumentDB

7) Neo4j

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

Дозвольте мені показати введення даних до реляційної бази даних на прикладі PostgreSQL.

Спочатку створіть таблицю товарів наступним чином:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

потім вставте дані

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);

Давайте подивимось на інший інший приклад: введіть тут опис зображення

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

У нереляційних базах даних немає фіксованої схеми, дані не нормуються. не створюється взаємозв'язок між даними, всі дані в основному поміщаються в один документ. Добре підходить для обробки великої кількості даних і може передавати багато даних одночасно, найкраще там, де велика кількість читань і менше записів, і менше оновлень, трохи важко запитувати дані, оскільки немає фіксованої схеми. Можливе горизонтальне та вертикальне масштабування. Відповідність CAP (узгодженість, доступність, толерантність до розділів) та BASE (в основному доступний, м’який стан, врешті-решт).

Дозвольте мені показати приклад введення даних до нереляційної бази даних за допомогою Mongodb

db.users.insertOne({name: ‘Mary’, age: 28 , occupation: ‘writer’ })
db.users.insertOne({name: ‘Ben’ , age: 21})

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

Давайте подивимось на інший інший приклад

({Studname: ‘Ash’, Subname: ‘Mathematics’, LecturerName: ‘Mr. Oak’})

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

Сподіваюся, це все пояснює


-1

Якщо говорити непросто, це сильно структуровано проти неструктуровано, що означає, що у вас є різний ступінь адаптованості для вашої БД. Відмінності виникають в індексації, особливо тому, що вам потрібно забезпечити, щоб певний посилальний індекс міг посилатися на інший елемент -> це відношення. Більш сувора структура реляційної БД випливає з цієї вимоги.

Зауважимо, що NosDB попередньо пропонує як реляційні, так і нереляційні БД, а також спосіб запиту як http://www.alachisoft.com/nosdb/sql-cheat-sheet.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.