What\'s the best way to structure a MySQL table for storing admin settings?
Like this?
Setting _|_ Value
setting1 | a
setting2 | b
setting3 | c
set
Consider the first option (Setting
, Value
) as columns. But also consider adding additional, meta columns as well, such as Description
(would come in handy if you have alot of ambiguous settings), PreviousValue
, LastUpdated
, UpdatedBy
, etc.
Table name = 'settings'
name | varchar <-- primary key
value | varchar
Then you can query like this:
SELECT * FROM settings WHERE name = 'default_printer';
This option is nice and easy and it will work well with 10, or 10,000 settings. With the other option you'll have to add a new column, which would be a completely pointless waste of time.
Edit
After your 1st comment you could choose multiple values like this:
SELECT * FROM settings WHERE name IN ('default_printer','default_page_size');
:-)
Your first example, name-value pairs or EAV, allows for a good deal more flexibility.
Check out the wiki page about EAV modelling in databases.
As usual, it depends. Solution 1 is simpler. Sol #2 easily integrates with ORMs, but may hit DB row size limitations. Google for OTLT (as in One True Lookup Table problem) How much settings do you have(few? dozens? hundreds?) How often will you need them?