Basi di dati relazionali e non relazionali

Un vantaggio significativo nell’uso di un RDBMS è l'”integrità referenziale”. L’integrità referenziale si riferisce all’accuratezza e alla coerenza dei dati. Questa integrità dei dati si ottiene usando queste chiavi primarie e straniere.

L’integrità referenziale preserva l’integrità dei dati attraverso i “vincoli”. I vincoli sono le regole che fanno rispettare l’accuratezza dei dati impedendo che un record correlato venga cancellato senza prima cancellare il record primario nella tabella principale. Se una relazione chiave primaria-esterna è stata aggiunta correttamente, allora il tentativo di cancellare un record primario senza prima rimuovere i record correlati dalle altre tabelle bloccherà la transazione fino a quando i record correlati non saranno rimossi. Questo previene ciò che viene chiamato “record orfani”, che sono record referenziati in una tabella che non hanno più un record primario nella tabella principale.

Le tre regole che l’integrità referenziale applica sono:

1. Una chiave esterna deve avere una chiave primaria corrispondente. (regola “No orphans”.)

2. Quando un record in una tabella primaria viene cancellato, anche tutti i record correlati che fanno riferimento alla chiave primaria devono essere cancellati, il che è tipicamente realizzato utilizzando la cancellazione a cascata.

3. Se la chiave primaria di un record cambia, anche tutti i record corrispondenti in altre tabelle che utilizzano la chiave primaria come chiave esterna devono essere modificati. Questo può essere realizzato usando un aggiornamento a cascata.

L’interrogazione dei dati in un sistema di gestione di database relazionali viene fatta usando il Structured Querying Language (SQL), che è un linguaggio robusto progettato per gestire i dati ospitati in un database relazionale.

SQL ha le capacità di creare, recuperare, aggiornare e cancellare record e si basa pesantemente su questa relazione chiave primaria/esterna per identificare dati correlati in più tabelle. Le capacità di SQL rendono il sistema di database relazionale la prima scelta per qualsiasi applicazione che richieda una forte funzionalità transazionale, l’estrazione di dati e un reporting complesso.

Questa istruzione SQL dimostra il recupero di un set di risultati di come verrebbero recuperati tutti i record di vendite per un singolo impiegato il cui EmployeeId = 1.

SELECT * FROM Employees

JOIN Sales ON Employees.EmployeeId = SALES.EmployeeId

WHERE EmployeeId = 1

Questa prossima istruzione SQL è un esempio di una query che implementa le join su più tabelle. In questo caso, la query SQL sta recuperando tutte le informazioni sui dipendenti, le informazioni sulle vendite e le informazioni sui clienti dalla tabella Customers.

SELECT * FROM Employees

JOIN Sales ON Employees.EmployeeId = SALES.EmployeeId

JOIN Customers ON Customers.CustomerId = SALES.CustomerId

WHERE EmployeeId = 1

I database relazionali forniscono anche una funzionalità chiamata “indicizzazione”. Un indice di database è una struttura di dati che migliora la velocità di recupero dei dati. Gli indici sono comunemente aggiunti ai campi di dati che sono abitualmente usati per interrogare e unire le tabelle. Nelle dichiarazioni SQL sopra riportate, EmployeeId e CompanyId sarebbero candidati per questo tipo di ottimizzazione.

Basi di dati non relazionali

Il database non relazionale, o NoSQL, memorizza i dati. Tuttavia, a differenza del database relazionale, non ci sono tabelle, righe, chiavi primarie o chiavi esterne. Invece, il database non relazionale usa un modello di memorizzazione ottimizzato per i requisiti specifici del tipo di dati memorizzati.

Alcuni dei più popolari database NoSQL sono MongoDB, Apache Cassandra, Redis, Couchbase e Apache HBase.

Ci sono quattro popolari tipi non relazionali: document data store, column-oriented database, key-value store e graph database. Spesso vengono usate combinazioni di questi tipi per una singola applicazione.

Document data store

Un document data store gestisce un insieme di campi stringa denominati e valori di dati oggetto in un’entità denominata “documento” tipicamente memorizzata sotto forma di documenti JSON, che possono essere codificati in una varietà di modi, inclusi XML, YAML, JSON, BSON o come testo semplice. I campi all’interno dei documenti sono esposti, permettendo ad un’applicazione di interrogare e filtrare i dati usando i valori dei campi.

I negozi di documenti non richiedono che tutti i documenti mantengano strutture di dati identiche, il che fornisce una grande flessibilità. È facile vedere come questa flessibilità può essere sfruttata man mano che i requisiti di un’organizzazione cambiano.

I negozi di dati a colonne (o column oriented)

Un negozio di dati a colonne organizza i dati in colonne, che è concettualmente simile al database relazionale. Il vero vantaggio di un database a colonne sta nel suo approccio denormalizzato alla strutturazione di dati sparsi, che deriva dal suo approccio orientato alle colonne per la memorizzazione dei dati.

Store di chiavi-valore

Questo è il meno complicato dei database NoSQL e, come il nome indicherebbe, il negozio di chiavi-valore è semplicemente una collezione di coppie chiave-valore contenute in un oggetto.

I negozi di documenti

I negozi di documenti sono un po’ più complessi dei negozi chiave-valore. Non assumono una particolare struttura del documento specificata con uno schema. Il negozio di documenti è progettato per memorizzare i documenti di tutti i giorni così come sono, e permettono un’interrogazione complicata.

MongoDB e CouchDB sono entrambi esempi di negozi di documenti.

Database grafici

L’ultimo è il tipo di database non relazionale più complesso. È progettato per memorizzare in modo efficiente le relazioni tra entità. Quando i dati sono molto interconnessi, come i sistemi di acquisto e produzione o i cataloghi di riferimento, i database grafici sono una buona soluzione.

Le possibilità per i database NoSQL grafici sono infinite, e con i dati che raccogliamo sempre più interconnessi, i database grafici continueranno a guadagnare popolarità, incluso il database relazionale ancora dominante.

Invece del linguaggio SQL (Structure Query Language) usato dai database relazionali, il database NoSQL usa Object-relational-mapping (ORM). Il concetto di ORM è la capacità di scrivere query usando il vostro linguaggio di programmazione preferito. Alcuni degli ORM più popolari sono Java, Javascript, .NET e PHP.

In sintesi

Cosa devi sapere sui database relazionali:

  • Loro lavorano con dati strutturati.

  • Le relazioni nel sistema hanno dei vincoli, il che promuove un alto livello di integrità dei dati.

  • Ci sono capacità di indicizzazione illimitate, il che si traduce in tempi di risposta delle query più veloci.

  • Sono eccellenti nel mantenere sicure le transazioni di dati.

  • Forniscono l’abilità di scrivere query SQL complesse per l’analisi dei dati e il reporting.

  • I loro modelli possono assicurare e applicare le regole di business al livello dei dati aggiungendo un livello di integrità dei dati che non si trova in un database non relazionale.

  • Sono orientati alle tabelle e alle righe.

  • Utilizzano SQL (linguaggio di interrogazione strutturato) per modellare e manipolare i dati, che è molto potente.

  • Esempi di database SQL: MySql, Oracle, Sqlite, Postgres e MS-SQL. Esempi di database NoSQL: MongoDB, BigTable, Redis, RavenDb, Cassandra, Hbase, Neo4j e CouchDb.

  • I database SQL sono più adatti per applicazioni pesanti di tipo transazionale.

I database non relazionali/NoSQL:

  • Hanno la capacità di immagazzinare grandi quantità di dati con poca struttura.

  • Forniscono scalabilità e flessibilità per soddisfare le mutevoli esigenze di business.

  • Forniscono opzioni senza schema o schema-on-read.

  • Hanno la capacità di catturare tutti i tipi di dati “Big Data” inclusi quelli non strutturati.

  • Sono orientati ai documenti.

  • Esempi di database NoSQL o non relazionali: MongoDB, Apache Cassandra, Redis, Couchbase e Apache HBase.

  • Sono i migliori per lo sviluppo rapido di applicazioni. NoSQL è la scelta migliore per l’archiviazione flessibile dei dati con poche o nessuna limitazione di struttura.

  • Forniscono un modello di dati flessibile con la possibilità di archiviare e combinare facilmente dati di qualsiasi struttura senza la necessità di modificare uno schema.

Quindi, quale dovresti scegliere per il tuo progetto? Per la risposta a questa domanda possiamo tornare all’inizio di questo articolo. Questi due tipi di database molto diversi sono ugualmente utili, ma per motivi e casi d’uso contrastanti. Uno non è necessariamente migliore dell’altro e sia i database relazionali che quelli non relazionali hanno il loro posto.

In breve, non c’è una sola risposta giusta. Il modo migliore per determinare quale tipo di database è il migliore per il vostro progetto è analizzare i bisogni dell’organizzazione e la funzionalità dell’applicazione che dovete raggiungere.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.