Utilizzare le colonne dinamiche in MariaDB

Utilizzare le colonne dinamiche in MariaDB

Le colonne dinamiche ci permettono di estendere il contenuto di alcune, e rendere più flessibile una tabella.

In questo modo si potrebbe evitare di dover passare ad un db NoSQL per qualcosa per cui in effetti non serve.

Vediamo come usarle in MariaDB (dalla vesione 5.3 se non erro); partiamo da una tabella di esempio del genere:

> DESC persone;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| nome      | varchar(50) | NO   |     | NULL    |                |
| attributi | mediumblob  | NO   |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

Le colonne dinamiche sono contenute in campi BLOB.

Inseriamo due records di esempio:

INSERT INTO persone (nome, attributi) VAUES
("totti", COLUMN_CREATE(1, "dirigente", 2, "roma", 3, "capitano")),
("messi", COLUMN_CREATE(1, "calciatore", 2, "barcellona", 3, "capitano", 4, "pallone d'oro"));

Ogni records può avere un determinato numero di attributi; la funzione che crea questo tipo di colonne è COLUMN_CREATE.

Per listare tutte le colonne di ogni records:

> SELECT nome, LENGTH(attributi), COLUMN_LIST(attributi) FROM persone;
+-------+-------------------+------------------------+
| nome  | LENGTH(attributi) | COLUMN_LIST(attributi) |
+-------+-------------------+------------------------+
| totti |                39 | `1`,`2`,`3`            |
| messi |                68 | `1`,`2`,`3`,`4`        |
+-------+-------------------+------------------------+

Per recuperare il valore della colonna:

> SELECT nome, COLUMN_GET(attributi, 1 AS CHAR(50)) FROM persone;
+-------+--------------------------------------+
| nome  | COLUMN_GET(attributi, 1 AS CHAR(50)) |
+-------+--------------------------------------+
| totti | dirigente                            |
| messi | calciatore                           |
+-------+--------------------------------------+

Possiamo anche filtrare per colonna:

> SELECT nome, COLUMN_GET(attributi, 1 AS CHAR(50)) FROM persone WHERE COLUMN_EXISTS(attributi, 4);
+-------+--------------------------------------+
| nome  | COLUMN_GET(attributi, 1 AS CHAR(50)) |
+-------+--------------------------------------+
| messi | calciatore                           |
+-------+--------------------------------------+

Oppure:

> SELECT nome, COLUMN_GET(attributi, 1 AS CHAR(50)) FROM persone WHERE COLUMN_GET(attributi, 4 AS CHAR(50)) LIKE "%pallone%";
+-------+--------------------------------------+
| nome  | COLUMN_GET(attributi, 1 AS CHAR(50)) |
+-------+--------------------------------------+
| messi | calciatore                           |
+-------+--------------------------------------+

Vi rimando alla documentazione per altri esempi!

Enjoy!




Share

Commentami!

About Mattepuffo.com

Blog dedicato all'informatica e alla programmazione!
Tutti i contenuti di questo blog, tranne casi particolari, sono sotto licenza Licenza Creative Commons Creative Commons Attribution-Noncommercial-Share Alike 2.5. .

2626 articoli
310 commenti
19 progetti
Altri link
  • About
  • Scrivimi
  • Copyright
  • Sitemap
  • matteo.ferrone@yahoo.it
  • GitHub
  • Privacy Policy