Обичайните подходи за това са:
- EAV
- hstore
- XML
- JSON
Вижте:
- Дизайн на база данни – трябва ли да използвам 30 колони или 1 колона с всички данни под формата на JSON/XML ?
- https://dba.stackexchange.com/q/27057/7788
Цялото нещо „направете колони достъпни за други потребители“ просто изисква да поддържате таблица с „персонализирани ключове“, към която добавяте всеки път, когато потребител дефинира неизползван преди това ключ.
Добавянето на колони с динамичен DDL звучи разумно на пръв поглед, но има ограничения за това колко колони можете да съхранявате и колко „широк“ може да бъде един ред. Ефективността на сканирането на таблицата се влошава, когато добавяте повече колони, въпреки че "разредените" колони, които са предимно нулеви, са сравнително евтини. Изисква се изключително заключване за добавяне на колона, нещо, което може да отнеме време, за да влезе в натоварена система, въпреки че добавянето на самата колона е много бързо, ако не е дефинирана като NOT NULL DEFAULT ...
. В началото ще работи доста добре, но подозирам, че ще съжалявате, че сте го направили по-късно.