I've noticed that some non-relational databases (e.g. Druid) have a feature where if a given string is stored in multiple rows, the physical storage keeps only a single copy (per some unit of storage).
My current project would benefit from a similar feature, but in a relational database. I expect that in some tens of columns in this project the distribution of strings will follow a power law. I know I could make a helper table that simply maps an integer to a string and use joins, but for these columns that feels like overkill. In this domain there are no separate business entities that would match helper tables, they're considered opaque external blobs of data which the project is required to store in their original form for later retrieval.
I estimate that these columns, if not stored in a compacted form, would compose >90% of the project's database size, so if there's a specialised database type for this kind of data distribution, I'd save a lot of disk space and probably get more performant queries.
Does SQL Server or PostgreSQL (which are the candidates for this project) have a feature that would manage this kind of tight storage of character data?