构建用于存储管理设置的MySQL表的最佳方法是什么?
喜欢这个吗?
Setting _|_ Value
setting1 | a
setting2 | b
setting3 | c
setting4 | d
setting5 | e
或者喜欢这个?
|--------|_setting1_|_setting2_|_setting3_|_setting4_|_setting5_|
Settings | a | b | c | d | e |
或者其他一些方式?
答案 0 :(得分:23)
表名='设置'
name | varchar <-- primary key
value | varchar
然后你可以像这样查询:
SELECT * FROM settings WHERE name = 'default_printer';
此选项简单易用,适用于10或10,000设置。使用另一个选项,您将不得不添加一个新列,这将完全没有浪费时间。
修改
在您的第一条评论之后,您可以选择多个这样的值:
SELECT * FROM settings WHERE name IN ('default_printer','default_page_size');
: - )
答案 1 :(得分:4)
将第一个选项(Setting
,Value
)视为列。但是也要考虑添加额外的元列,例如Description
(如果你有很多不明确的设置会派上用场),PreviousValue
,LastUpdated
,UpdatedBy
,等
答案 2 :(得分:1)
您的第一个示例,名称 - 值对或EAV,可以提供更大的灵活性。
答案 3 :(得分:0)
像往常一样,这取决于。解决方案1更简单。 Sol#2可以轻松地与ORM集成,但可能会遇到DB行大小限制。 谷歌的OTLT(如在一个真正的查找表问题) 你有多少设置(几个?几十个?几百个?)你需要多久一次?