I soliti approcci a questo sono:
- EAV
- hstore
- XML
- JSON
Vedi:
- Progettazione del database:dovrei usare 30 colonne o 1 colonna con tutti i dati sotto forma di JSON/XML ?
- https://dba.stackexchange.com/q/27057/7788
L'intera operazione "rendi le colonne disponibili ad altri utenti" richiede solo di mantenere una tabella "chiavi personalizzate" da aggiungere ogni volta che un utente definisce una chiave precedentemente non utilizzata.
L'aggiunta di colonne con DDL dinamico all'inizio sembra ragionevole, ma ci sono limiti al numero di colonne che puoi archiviare e alla larghezza di una riga. Le prestazioni della scansione della tabella peggiorano man mano che si aggiungono più colonne, sebbene le colonne "sparse" che sono per lo più nulle siano relativamente economiche. È necessario un blocco esclusivo per aggiungere una colonna, cosa che può richiedere tempo per entrare in un sistema occupato, anche se aggiungere la colonna da sola è molto veloce se non è definita come NOT NULL DEFAULT ...
. All'inizio funzionerà abbastanza bene, ma sospetto che ti pentirai di averlo fatto in seguito.