I’m debating three different approaches to to storing sitewide settings for a web application.
A key/value pair lookup table, each key represents a setting.
- Pros Simple to implement
- Cons No Constraints on the individual settings
A single row settings table.
- Pros Per setting defaults and constraints
- Cons – Lots of settings would mean lots of columns. Not sure if Postgres would have an issue with that
Just hard code it since the settings won’t change that often.
- Pros Easy to setup and add more settings.
- Cons Much harder to change
Thoughts on which way to go?
I’ve used a key/value pair lookup table much in the way you describe with good results.
As an added bonus the table had a “configuration name” column which provided a simple way to choose/activate a specific set of configuration settings. That meant that
prod,dev, andtestcould all live in the same table, though it was up to the application to choose which set to use. In our case a JVM argument made sense. It might make sense to store different “sets” of config settings in the same DB table; then again, it might not.If you are thinking about file-based configuration, I like INI or YAML. You could still store it in a database, though you probably won’t find an INI or YAML column type (as you might for XML).