Il ripensamento e l’ottimizzazione dei processi aziendali partendo dall’analisi e dalla gestione intelligente dei dati è un tema molto attuale al giorno d’oggi.
Non a caso negli ultimi anni gli ecosistemi di dati sono diventati sempre più strategici per il top management nell’esecuzione delle proprie funzioni e molte organizzazioni stanno imparando oggi a riconoscere l’importanza di passare da un approccio process driven a uno data driven.
In questo articolo vorrei spiegarti come puoi sfruttare il database Oracle per costruire applicazioni moderne, in grado di manipolare i dati indipendentemente dalla loro forma e dalla loro rappresentazione.
Cosa voglio dire?
Lo scoprirai tra poco.. buona lettura!
IN QUESTO ARTICOLO
C’era una volta un Database Relazionale
Se ti dico database, a cosa pensi?
La prima cosa che viene in mente a me personalmente è il classico database relazionale (Relational Database Management System – RDBMS ) basato sulla definizione di tabelle, campi e vincoli di integrità referenziale.
Il modello relazionale ancora oggi, da quasi quaranta anni, è sicuramente uno dei modelli logici di rappresentazione dei dati più utilizzati, soprattutto nell’ambito delle applicazioni gestionali.
Molti dei database più famosi come Oracle, SQL Server, MySQL e Db2 (giusto per citare qualche esempio) vedono la luce proprio come database relazionali.
Malgrado ciò, nel tempo sono nati altri modi per rappresentare i dati in modo più efficace ed efficiente.
A cosa mi riferisco?
XML, JSON e Spatial Data sono solo alcuni esempi e le tecnologie che sono nate per memorizzare queste tipologie di dati sono sempre più diffuse.
Mi riferisco, in sostanza, ai Database NoSQL che con l’avvento delle applicazioni moderne, soprattutto quelle che hanno bisogno di manipolare enormi quantità di dati (i famosi Big Data), hanno trovato una loro ragion d’essere.
Ma cos’è esattamente un Database NoSQL?
La parola NoSQL significa Not Only SQL.
Quindi un database NoSQL, più che essere qualcosa in contrapposizione ad un database relazionale classico, va piuttosto inteso come una soluzione che ne completa ed estende le funzionalità.
I database NoSQL superano i limiti dei sistemi relazionali, utilizzando modelli di rappresentazione dei dati alternativi che consentono sia prestazioni più elevate che costi di archiviazione più contenuti.
Detta così, sembra che i database NoSQL siano la soluzione a tutti i problemi, vero?
Ovviamente non è così.
Mai come oggi, grazie anche all’avvento del Machine Learning e della Data Science, l’SQL è una competenza fondamentale ed è certo che ancora per un bel po’ di tempo i database relazionali saranno fondamentali.
Tuttavia, non dobbiamo dimenticare che la scelta di una tecnologia dipende in primis dal tipo di applicazione che dobbiamo costruire.
Oggi, molte applicazioni trovano nei database NoSQL una soluzione decisamente migliore.
Ma cosa bisogna fare quando le aziende (e gli sviluppatori che creano le applicazioni) hanno bisogno di gestire in un unico ambiente dati che vengono rappresentati attraverso formati diversi?
Quando al volante dell’Azienda ci sono i Dati
Riuscire a manipolare in un solo ambiente i dati che arrivano da sorgenti diverse e con formati diversi non è certamente una questione da poco.
Tuttavia, è una problematica con le quale le aziende, soprattutto quelle che desiderano rimanere competitive, prima o poi devono fare i conti.
Da qualche anno si sente più spesso parlare di data-driven companies, come di quelle realtà aziendali che sono, guidate dai dati.
Ma cosa vuol dire esattamente essere una data-driven company?
Le aziende data-driven sono quelle che considerano la gestione dei dati non come un fattore tecnico, ma come un pilastro della propria strategia di business.
Essere data-driven significa affidare ai dati, alla loro lettura e alla loro interpretazione, le decisioni aziendali affinché siano il più possibile basate su fatti oggettivi e non su sensazioni personali.
Alcuni esempi?
Nel Marketing l’obiettivo di prevedere i comportamenti dei clienti passa attraverso la raccolta e l’integrazione di dati che arrivano da un sempre maggior numero di fonti.
Le più comuni sono il CRM, l’ERP, l’eCommerce, il Contact Center, il sito web aziendale e le varie applicazioni mobile. A queste se ne possono aggiungere altre come le piattaforme di Web Analytics oppure di Voice of the Customer Analytics.
In ambito Industriale e della Supply Chain, l’Internet of Things rende ogni oggetto un dispositivo connesso e comunicante, creando innumerevoli opportunità legate all’accesso a nuove fonti di dati.
I sensori sono in grado di inviare informazioni in tempo reale e i tag tengono traccia di ogni spostamento.
Anche nell’ambito delle Risorse Umane HR gestire e analizzare dati relativi al personale aiuta a fornire un maggiore supporto decisionale e strategico in termini di acquisizione, gestione, sviluppo e retention delle persone.
I dati da trasformare poi in informazioni utili per la Direzione HR sono ad esempio quelli di performance, tassi di retention e turnover, contributi social media, risultati delle survey di clima, leadership and competence assessment.
Data Driven App e Multi-Model Database
Insomma, abbiamo ribadito, ma penso che non ci fossero dubbi al riguardo, quanto i dati siano importanti soprattutto perché permettono di conoscere il business più di quanto il business non conosca se stesso.
Ad accompagnare l’evoluzione delle aziende verso un modello data-driven ci sono poi anche le applicazioni gestionali che inevitabilmente diventano anch’esse sempre più data-driven.
Ma cosa sono le applicazioni Data-Driven?
Beh, affermare che una applicazione gestionale debba essere basata sui dati è qualcosa di scontato.
Quello che invece è cambiato è il modo in cui i dati devono (o possono) essere rappresentati all’interno delle stesse.

Le applicazioni moderne hanno bisogno di essere concepite secondo dei paradigmi nuovi, che consentano di caricare ed integrare dati che possono avere formati e fonti diverse.
Le applicazioni si dicono data-driven quando sono in grado di valutare dati indipendentemente dalla loro fonte (IOT, Machine Learning, ecc…) e dal loro formato (XML, JSON, ecc…).
Alla base di una Data Driven App deve esserci un Database Multi-Model, ovvero un database che è in grado di supportare dati in più formati, ad esempio dati relazionali, grafici, documenti JSON o XML, dati spaziali e coppie chiave-valore.
Nel corso di questo articolo ti spiegherò come puoi usare il database Oracle non solo come un classico database relazionale ma in tanti altri modi che magari non ti aspetti.
Documenti JSON
JSON, acronimo di JavaScript Object Notation, è un formato di rappresentazione dei dati particolarmente adatto allo scambio di informazione fra applicazioni.
Non è quindi un caso che abbia trovato largo utilizzo nell’ambito di sviluppo dei microservizi basati API-REST.
Al giorno d’oggi è sicuramente uno dei metodi di rappresentazione dei dati più diffuso per diversi motivi, primo fra tutti la sua semplicità in quanto facile da leggere sia da parte di un umano che da parte di una macchina.
Eccone un esempio:
{
"id":1,
"first_name":"John",
"last_name":"Doe",
"address":{
"street":"Main St",
"city":"Redwood",
"zipCode":"94607",
"State":"CA",
"phoneNumber":null
}
}
Per salvare nel database Oracle un documento JSON possiamo usare una tabella all’interno della quale andremo a creare una colonna in cui salvare il documento.
Che tipo di dato deve avere la colonna?
Questa domanda non è banale e vanno fatte alcune considerazioni.
Un documento JSON è prima di tutto un testo pertanto è abbastanza naturale pensare ad una colonna VARCHAR2 che però non è la scelta ottimale perché, come forse saprai, è limitata a 32k.
Possiamo usare una colonna CLOB che non ha un limite sulla dimensione del suo contenuto ed è facilmente estraibile attraverso una istruzione SELECT ma anche in questo caso non è la soluzione migliore perché l’occupazione disco non è ottimizzata e alcuni set di caratteri potrebbero non essere gestiti correttamente.
L’opzione di usare una colonna di tipo BLOB è in molti casi la migliore sebbene il valore contenuto al suo interno non sia estraibile attraverso una semplice istruzione SELECT.
A partire dalla versione 20c del database Oracle è disponibile il DATATYPE dedicato chiamato appunto JSON che è ottimizzato per contenere al suo interno documenti in formato JSON.
Se hai un database con una versione uguale o superiore alla 20c questa è sicuramente la scelta più logica e sensata.
Per manipolare un documento JSON usando il database Oracle (nel momento in cui sto scrivendo questo articolo sto usando il database 19c), prima di tutto va creata una tabella.
create table j_person (
person_id integer not null primary key,
person_data blob not null
);
Se hai la possibilità di definire una colonna di tipo JSON (anziché BLOB come ho dovuto fare io) non devi fare altro.
Io, invece, devo aggiungere una constraint che validerà il documento che inseriremo nella tabella affinché sia effettivamente un JSON.
alter table j_person
add constraint person_data_json
check ( person_data is json );
Ora possiamo aggiungere alcuni dati di esempio nella tabella J_PERSON
insert into j_person
values ( 1, utl_raw.cast_to_raw ( '{"id":1,
"first_name":"John",
"last_name":"Doe",
"address": {"street":"Main St",
"city":"Redwood",
"zipCode":"94607",
"State":"CA",
"phoneNumber":null
}
}' ));
insert into j_person
values ( 2, utl_raw.cast_to_raw ( '{"id":2,
"first_name":"Mary",
"last_name":"Doe",
"address": {"street":"Main St",
"city":"San Francisco",
"zipCode":"94607",
"State":"CA",
"phoneNumber":null
}
}' ));
Supponiamo di dover modificare una informazione del documento, ad esempio il numero di telefono di una persona specifica.
Puoi usare una classica istruzione di UPDATE e passare come parametro tutto il documento.
update j_person
set person_data = utl_raw.cast_to_raw (
'{
"id":1,
"first_name":"John",
"last_name":"Doe",
"address": {"street":"Main St",
"city":"Redwood",
"zipCode":"94607",
"State":"CA",
"phoneNumber":"+99 333 333"
}
}'
) where person_id = 1;
Un modo decisamente più efficace ed efficiente per fare la stessa cosa è attraverso la funzione json_mergepatch che permette di modificare specifiche porzioni di un documento JSON.
update j_person
set person_data = json_mergepatch (
person_data,
'{"last_name":"Dawson",
"address" : {"phoneNumber":"+99 444 444"}
}'
)
where person_id = 2;
Nulla ci vieta, a questo punto, di poter aggiungere nuovi attributi ad uno specifico documento, usando sempre la funzione json_mergepatch.
update j_person
set person_data = json_mergepatch (
person_data,
'{"title":"Mrs"}'
)
where person_id = 2;
Laddove la funzione json_mergepatch potrebbe diventare inefficiente da utilizzare (soprattutto se la porzione di documento da modificare è più complessa come nel caso degli array, puoi usare la funzione json_transform (disponibile dalla release 21c del database di Oracle e che eventualmente è possibile abilitare anche nella 19c).
Grazie a json_transform sei in grado di modificare specifici attributi di un documento JSON.
Ad esempio, questa è la sintassi per aggiornare il valore di un attributo specifico:
update j_person
set person_data = json_transform (
person_data,
replace '$.address.phoneNumber' = '+99 999 999'
)
where person_id = 2;
Invece con questa istruzione puoi aggiungere dei nuovi attributi ad un documento
update j_person
set person_data = json_transform (
person_data,
set '$.address.country' = 'US'
)
where person_id = 2;
Bene, ora sai come inserire e modificare oggetti JSON nel database.
C’è un modo facile per estrarre le informazioni da una colonna in cui è memorizzato un documento JSON?
Ne esistono diversi e, cosa non banale, puoi usare semplici istruzioni SQL.
Il primo metodo è basato su un meccanismo chiamato Simple Dot-Notation Access che consiste, in poche parole, nel costruire una query SQL avendo l’accortezza di:
- selezionare l’attributo da estrarre usando il path per arrivare al singolo attributo
- usare sempre una alias per la tabella che contiene il documento JSON
Quindi, se vuoi estrarre, ad esempio, il nome e il cognome di ciascuna persona dalla tabella J_PERSON dovrai eseguire la query seguente:
select person.person_data.first_name,
person.person_data.last_name
from j_person person;
Oltre al nome e cognome, possiamo estrarre tutti gli altri campi del documento JSON:
select person.person_data.title,
person.person_data.first_name,
person.person_data.last_name,
person.person_data.address.street street,
person.person_data.address.city city,
person.person_data.address.zipCode zip_code,
person.person_data.address.state state,
person.person_data.address.phoneNumber phoneNumber,
person.person_data.address.country country
from j_person person;
Questo è il risultato

La funzione json_value, invece, consente di estrarre un valore specifico:
select json_value (person_data,'$.title' returning varchar2) title,
json_value (person_data,'$.first_name' returning varchar2) first_name,
json_value (person_data,'$.last_name' returning varchar2) last_name,
json_value (person_data,'$.address.street' returning varchar2) street,
json_value (person_data,'$.address.city' returning varchar2) city
from j_person person
Per quel che riguarda la manipolazione e la lettura dei documenti JSON ci sono molte altre funzionalità di cui varrebbe la pena parlare e che approfondiremo in un articolo dedicato.
La cosa importante, che credo valga la pena sottolineare, è il fatto che lavorando direttamente con il database puoi interrogare ed analizzare le informazioni contenute nei documenti JSON come se fossero dati relazionali classici senza soluzione di continuità.
Ti lascio qualche riferimento utile che ti consiglio di leggere:
Spatial Data
Quando si parla di dati spaziali ci si riferisce a quelle informazioni che determinano la posizione di un oggetto all’interno di uno spazio geografico, tipicamente di una mappa.
Le applicazioni che utilizzano i dati spaziali sono molteplici, come ad esempio quelle che vengono utilizzate dalle aziende che si occupano di logistica o trasporti.
Avendo dei dati spaziali a disposizione nel database puoi visualizzare dei punti di interesse su una mappa, effettuare delle ricerche oppure calcolare distanze tra luoghi, assets, persone.
Inoltre puoi effettuare delle analisi per i trasporti, per le telecomunicazioni e per le reti di servizi.
Oracle Spatial Studio
Oracle Spatial Studio è una applicazione gratuita, che puoi utilizzare sia in Oracle Cloud che direttamente dal tuo PC, che ti consente di manipolare e visualizzare i dati spaziali.
Qui sotto puoi trovare alcune risorse utili che puoi consultare.
Get Started with Oracle Spatial Studio
Getting Started with Spatial Studio on Oracle Cloud Free Tier
Vediamo insieme con un esempio concreto come manipolare i dati spaziali.
Supponiamo di voler implementare una semplice applicazione per gestire gli interventi di assistenza e field services.
Dovremo quindi gestire una o più sedi (tabella HOTSPOT ) e un elenco di veicoli (tabella VEHICLES) geo-localizzati.
La posizione (dato spaziale) di una sede piuttosto che di un veicolo sarà gestita usando una colonna di tipo SDO_GEOMETRY.
Ecco gli script per creare le tabelle:
create table hotspot (
hotspot_id number,
hotspot_name varchar2(50),
address varchar2(50),
city varchar2(30),
state varchar2(30),
zip_code varchar2(30),
hotspot_geo_location sdo_geometry
);
create table vehicles (
vehicle_id number,
vehicle_name varchar2(50),
vehicle_geo_location sdo_geometry
);
Una volta create le tabelle vado a popolarle con alcuni dati di esempio.
insert into hotspot values (
101, 'Corso Buenos Aires',
'Corso Buenos Aires, 9, Milano',
'Milano', 'IT', '20124',
sdo_geometry(
2001, 8307, sdo_point_type(
45.474553, 9.205134, null
), null, null
)
);
insert into hotspot values (
102,'Viale Tunisia/P.ta Venezia',
'Piazza Santa Francesca Romana, 1, 20129 Milano MI',
'Milano', 'IT', '20129',
sdo_geometry(
2001, 8307, sdo_point_type(
45.476907, 9.207490, null
), null, null
)
);
Non mi voglio soffermare adesso sui dettagli di come lavorare con gli oggetti SDO_GEOMETRY (anche perché ammetto di non conoscerlo molto bene).
Per il momento quello che ci interessa sapere è che i record che abbiamo inserito contengono le coordinate (latitudine e longitudine) dei punti che abbiamo inserito.
In maniera del tutto analoga, carichiamo le posizioni di cinque veicoli:
insert into VEHICLES values (
101, 'Veicolo A',
sdo_geometry(
2001, 8307, sdo_point_type(
45.470515, 9.205436, null
), null, null
)
);
insert into VEHICLES values (
102, 'Veicolo B',
sdo_geometry(
2001, 8307, sdo_point_type(
45.471922, 9.206526, null
), null, null
)
);
insert into VEHICLES values (
103, 'Veicolo C',
sdo_geometry(
2001, 8307, sdo_point_type(
45.489297, 9.217603, null
), null, null
)
);
insert into VEHICLES values (
104, 'Veicolo D',
sdo_geometry(
2001, 8307, sdo_point_type(
45.519362, 9.191595, null
), null, null
)
);
insert into VEHICLES values (
105, 'Veicolo E',
sdo_geometry(
2001, 8307, sdo_point_type(
45.486382, 9.143078, null
), null, null
)
);
Per lavorare con i dati spaziali è necessario configurare dei metadati nella tabella USER_SDO_GEOM_METADATA.
Questo è uno script per caricare dei meta-dati funzionali al tipo di applicazione che vogliamo costruire.
insert into user_sdo_geom_metadata (
table_name,
column_name,
diminfo,
srid
) values (
'HOTSPOT',
'HOTSPOT_GEO_LOCATION',
sdo_dim_array(
sdo_dim_element('LONG', - 180.0, 180.0, 0.5),
sdo_dim_element('LAT', - 90.0, 90.0, 0.5)
),
8307
);
insert into user_sdo_geom_metadata (
table_name,
column_name,
diminfo,
srid
) values (
'VEHICLES',
'VEHICLE_GEO_LOCATION',
sdo_dim_array(
sdo_dim_element('LONG', - 180.0, 180.0, 0.5),
sdo_dim_element('LAT', - 90.0, 90.0, 0.5)
),
8307
);
L’ultima cosa da fare consiste nel creare degli indici di tipo spatial_index (questa operazione è obbligatoria)
create index vehicles_sidx on vehicles (vehicle_geo_location)
indextype is mdsys.spatial_index;
create index hotspot_sidx on hotspot (hotspot_geo_location)
indextype is mdsys.spatial_index;
Ora possiamo finalmente fare delle query sui dati spaziali.
Ad esempio voglio sapere quali sono i tre veicoli più vicini all’hotspot di Corso Buenos Aires e a quale distanza sono (espressa in metri).
Per ottenere questo risultato utilizzerò la funzione sdo_nn:
select /*+ordered*/
h.hotspot_name,
h.address,
c.vehicle_name,
sdo_nn_distance(
1
) dist_meter
from
hotspot h,
vehicles c
where
h.hotspot_id = 101
and sdo_nn(c.vehicle_geo_location, h.hotspot_geo_location, 'sdo_num_res=3', 1) = 'TRUE'
order by
dist_meter;
Questo è il risultato che ottengo

Invece, per trovare tutti i veicoli che sono all’interno di un raggio di 2 km da una stazione specifica posso usare questa query:
select /*+ordered*/
h.hotspot_name,
h.address,
c.vehicle_name
from
hotspot h,
vehicles c
where
h.hotspot_id = 101
and sdo_within_distance(c.vehicle_geo_location, h.hotspot_geo_location, 'distance = 2 unit=KM') = 'TRUE'

Graph Data
Un Grafo è una struttura formata da un numero finito vertici o nodi e un numero finito di linee, detti archi, che collegano coppie di vertici.

Queste strutture di rappresentazione dei dati hanno sempre avuto un ruolo molto importante in moltissimi applicazioni e non è un caso che esiste una vera e propria teoria dei grafi che consente di affrontare e risolvere problemi particolari non solo in matematica ma anche in vari campi delle scienze applicate quali la chimica, la meccanica statistica, la teoria economica dei trasporti, i controlli automatici.
I database a grafo sono particolari tipi di database progettati appositamente per l’archiviazione e la navigazione delle relazioni fra i nodi
Sono proprio queste relazioni a rivestire un ruolo chiave nei database a grafo e buona parte del valore di questi database deriva proprio dalla loro presenza.
Alcuni dei casi d’uso più comuni che hanno fanno uso di dati rappresentati attraverso dei grafi sono il rilevamento di attività fraudolente (come ad esempio i pagamenti circolari) e i motori di raccomandazione dei prodotti (ti dice nulla Amazon?).
Text Data
L’indicizzazione dei documenti non è un concetto nuovo, tutt’altro.
Tutti i motori di ricerca basano il loro successo di sofisticati algoritmi di indicizzazione e posizionamento di milioni e milioni di pagine web che vengono continuamento scansionate da instancabili crawler.
Oracle Text è una funzionalità del database Oracle e che consente di indicizzare e classificare documenti di vario genere (sicuramente quelli testuali) per essere utilizzati in diversi contesti.
Quello sicuramente più scontato è l’implementazione di funzionalità di ricerca avanzate. Potremmo dire, in un certo senso, che consente di creare un vero e proprio motore di ricerca.
Ho spiegato come usare Oracle Text per implementare una funzionalità di ricerca di tipo fuzzy in questo articolo.
Blockchain Tables
La blockchain è una struttura dati condivisa e immutabile.
È un vero e proprio database in cui le informazioni, ovvero le transazioni, sono raggruppate in blocchi, concatenati tra loro, e la cui integrità è garantita dall’uso della crittografia.
Una delle caratteristiche peculiari di una blockchain è la sua immutabilità: il suo contenuto una volta scritto tramite un procedura regolamentata, non è più né modificabile né eliminabile, a meno di non invalidare l’intero processo.
Una blockchain pubblica è un database distribuito in cui tutti i nodi possono partecipare al processo di validazione delle transazioni da includere nel registro. Per quanto possa sembrare una contraddizione, il livello di sicurezza è elevatissimo.
Una blockchain privata è tale se le autorizzazioni di scrittura e modifica dei blocchi sono invece centralizzate ed è pertanto più adeguata a modelli di business tradizionali, dove la privacy e la gestione dei dati è di vitale importanza, motivo per cui devono rimanere sotto il controllo dell’azienda.
Il database Oracle che include la tecnologia blockchain che ci permette di costruire vere e proprie blockchain private.
Vediamo insieme come creare una blockchain table per registrare una generica transazione.
create blockchain table demo_transactions (
trx_id number,
trx_date date,
trx_number number,
constraint demo_transaction_pk primary key (trx_id)
) no drop until 0 days idle
no delete until 26 days after insert
hashing using "SHA2_512" version "v1";
Come vedi, lo script di creazione di una tabella blockchain non è molto diverso da quello usato per creare una tabella classica.
Ci sono però delle peculiarità che vale la pena evidenziare come, ad esempio, la clausola “no delete” la quale fa si che nessuno (nemmeno un DBA per intenderci) potrà eliminare la riga per un certo periodo oppure, se lo si vuole, per sempre.
Esegui questa query per vedere i dettagli della tabella appena creata:
select
internal_column_id,
column_name,
hidden_column
from
user_tab_cols
where
table_name = 'DEMO_TRANSACTIONS'
order by
internal_column_id
Possiamo vedere che ci sono delle colonne nascoste che vengono usate dal database per gestire la blockchain table.

L’inserimento di un record in una blockchain table viene eseguito tramite una classica istruzione di INSERT
insert into demo_transactions values (1,sysdate,100);
Se provo a cancellare un record dalla tabella ottengo questo risultato

Lo stesso risultato è quello che ottengo se provo a modificare un record tramite una istruzione UPDATE.

Machine Learning
Vorrei chiudere questo articolo introducendo con uno degli argomenti sicuramente più affascinanti per chi ama lavorare con i dati, ovvero il machine learning, la nuova frontiera (che poi tanto nuova non è) delle applicazioni moderne.
Non è un mistero che al giorno d’oggi la nostre vite interagiscano continuamente con sistemi e applicazioni che fanno uso di algoritmi di intelligenza artificiale.
Il machine learning, traducibile in italiano come apprendimento automatico, è un sottoinsieme dell’intelligenza artificiale che si occupa di creare sistemi che apprendono o migliorano le performance in base ai dati che utilizzano.
Non solo, grazie agli algoritmi di apprendimento automatico, i data scientist riescono in un certo senso a generare nuova informazione, trovando correlazioni e relazioni tra oggetti, dati e processi.
Il database Oracle mette a disposizione degli sviluppatori Oracle Machine Learning, una suite completa che consente costruire modelli predittivi direttamente nel database.
Conclusioni
Siamo arrivati alla fine di questo lungo articolo.
Abbiamo visto come un database multi-modello come Oracle sia in grado di gestire in modo integrato dati ed informazioni di tanti tipi diversi.
Questo è sicuramente un aspetto da non trascurare, soprattutto per quelle aziende che non possono investire in troppe tecnologie.
E tu, cosa ne pensi? Hai mai dovuto sviluppare applicazioni basate su dati non relazionali?
Fammi sapere!
Un abbraccio
Daniele
Lascia un commento