Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestire Classi e Cluster con SQL

Una panoramica dei comandi SQL usati per creare, modificare e rimuovere le classi e i cluster, strutture fondamentali per la gestione dei dati su OrientDB.
Una panoramica dei comandi SQL usati per creare, modificare e rimuovere le classi e i cluster, strutture fondamentali per la gestione dei dati su OrientDB.
Link copiato negli appunti

Nelle lezioni precedenti, sono stati introdotti i fondamenti del modello a oggetti di OrientDB, basato su record, classi e
cluster. Abbiamo visto come creare una classe in SQL, e in questa lezione approfondiremo i comandi relativi alla gestione di classi e cluster in SQL.

Definizione di classi

In OrientDB, come nella programmazione a oggetti, le classo rappresentano informazioni di alto livello, costituite dall'aggregazione di più dati. Supponiamo che nel nostro sistema informativo un oggetto di classe Persona abbia le proprietà nome, cognome ed eta, dove i primi due sono tipi String, il terzo è un intero:

CREATE CLASS Persona
CREATE PROPERTY Persona.nome String
CREATE PROPERTY Persona.cognome String
CREATE PROPERTY Persona.eta Short

Con il comando info class possiamo visualizzare la struttura di una classe:

> INFO CLASS Persona          
Class................: Persona
Default cluster......: persona (id=11)
Supported cluster ids: [11]
Cluster selection....: round-robin
PROPERTIES
+----------+-----------+-----------+----------+
 NAME                          | TYPE
-------------------------------+---------------
 eta                           | SHORT
 nome                          | STRING
 cognome                       | STRING

A questo punto, potremo provare ad effettuare qualche inserimento:

INSERT INTO Persona(nome,cognome,eta) VALUES ('carlo','neri',41)
INSERT INTO Persona(nome,cognome,eta,segni_particolari) VALUES ('carlo','neri',41,'brutto')

La prima INSERT si attiene scrupolosamente alla definizione della classe, inserendo valori solo nelle proprietà esistenti.
La seconda, invece, inserisce un campo in più (denominato segni_particolari): grazie all'assenza di una strutturazione fissa dei dati, non ci verrà impedito di avere un record con un suo campo specifico. La seguente operazione, invece, fallirà perchè non rispetteremo la tipologia di valore di una proprietà esistente, eta, che è di tipo numerico:

INSERT INTO Persona(nome,cognome,eta,segni_particolari) VALUES ('carlo','neri','valore non numerico','brutto')

Il contenuto di una classe può essere visualizzato con il comando browse class:

> BROWSE CLASS Persona
----+-----+-------+-----+-------+----+-----------------
#   |@RID |@CLASS |nome |cognome|eta |segni_particolari
----+-----+-------+-----+-------+----+-----------------
0   |#11:7|Persona|carlo|neri   |41  |null
1   |#11:8|Persona|carlo|neri   |41  |brutto
----+-----+-------+-----+-------+----+-----------------

È possibile, infine, verificare sempre l'elenco delle classi disponibili in un database tramite il comando LIST CLASSES, o semplicemente CLASSES.

Modificare e cancellare classi

Esistono anche alcuni comandi per eliminare o modificare una classe. Con DROP CLASS possiamo cancellarne una: se, per esempio, non avessimo più bisogno della classe Persona, potremmo utilizzare:

DROP CLASS Persona

Qualora invece volessimo modificare solo un attributo di una classe sarebbe sufficiente usare il comando ALTER CLASS nel seguente formato:

ALTER CLASS nome-classe nome-attributo valore-attributo

Se, ad esempio, volessimo rinominare la classe Persona in Individuo, potremmo procedere così:

ALTER CLASS Persona NAME Individuo

Un altro aspetto che possiamo modificare con ALTER CLASS è lo strict mode. Nel paragrafo precedente, la classe Persona è stata utilizzata in modalità schema-mixed, in quanto sono state definite alcune proprietà ma all'occorrenza i record hanno incluso delle proprietà personalizzate. Se volessimo usare una classe in modalità schema-full dovremmo abilitare lo strict mode nel seguente modo:

ALTER CLASS Persona STRICTMODE true

Così facendo un eventuale comando INSERT accetterebbe solo le proprietà esplicitamente definite restituendo errore in caso
contrario.

Altri attributi che possono essere modificati verranno incontrati nel proseguo della trattazione. Una lista completa è comunque disponibile nella documentazione ufficiale.

Utilizzo dei cluster

Per poter memorizzare i record, una classe ha bisogno di avere a disposizione un cluster, la vera e propria struttura fisica. Nel paragrafo precedente abbiamo visto che con il comando info class viene indicato, tra le altre informazioni, quali sono gli ID dei cluster in cui verranno salvati i dati della classe. A volte, potrebbe servire avere a disposizione più cluster per la medesima classe, e pertanto sarebbe necessario aggiungerne un altro. Ciò può essere fatto con il comando ALTER CLASS:

ALTER CLASS Persona ADDCLUSTER nuovoelenco

Qualora il cluster non esistesse già, ne verrebbe creato uno fisico ed il suo ID sarebbe comunicato come output del comando. In alternativa, è possibile creare il cluster in modo esplicito:

CREATE CLUSTER nuovoelenco

Successivamente sarà quindi possibile associare il cluster così creato ad una classe.

Nel momento in cui la classe si trova ad avere più di un cluster per la memorizzazione, in fase di creazione di nuovi
record, è possibile indicare in quale di essi deve essere fatto l'inserimento:

INSERT INTO cluster:nuovoelenco(nome,cognome) VALUES ('ennio','gialli')

In questo caso abbiamo richiesto esplicitamente che il nuovo record venisse inserito nel cluster di nome nuovoelenco, che è associato alla classe Persona. Si potrebbero a questo punto visualizzare i record appartenenti alla classe come segue:

> BROWSE CLASS Persona 
----+-----+-------+-----+-------+----+-----------------
#   |@RID |@CLASS |nome |cognome|eta |segni_particolari
----+-----+-------+-----+-------+----+-----------------
0   |#11:7|Persona|carlo|neri   |41  |null
1   |#11:8|Persona|carlo|neri   |41  |brutto
2   |#13:0|Persona|ennio|gialli |null|null
----+-----+-------+-----+-------+----+-----------------

Si noti che l'ID dell'ultimo record è diverso da quello degli altri due. Il @RID inizia con #13 mentre gli altri con #11, a dimostrazione che i record risiedono su cluster diversi. Per visualizzare i record di un solo cluster si può usare uno dei seguenti comandi:

BROWSE CLUSTER nuovoelenco

oppure:

SELECT * FROM cluster:nuovoelenco

In entrambi i casi, l'output sarebbe il seguente:

----+-----+-------+-----+-------
#   |@RID |@CLASS |nome |cognome
----+-----+-------+-----+-------
0   |#13:0|Persona|ennio|gialli
----+-----+-------+-----+-------

Ti consigliamo anche