2010-03-18 119 views
19

构建MySQL表格以存储管理设置的最佳方式是什么?我应该如何使用MySQL构建我的设置表?

是否这样?

Setting _|_ Value 
setting1 | a 
setting2 | b 
setting3 | c 
setting4 | d 
setting5 | e 

还是这样?

|--------|_setting1_|_setting2_|_setting3_|_setting4_|_setting5_| 
Settings | a  | b  | c  | d  | e  | 

或者也许有其他方式?

回答

20

表名= '设置'

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'); 

:-)

+0

+1明确指出,我需要一个主关键,因为我忘了它在我原来的职位;)...看起来不错。我特别喜欢这个,使用这个设置,我可以创建一个功能,允许我选择一个设置(或一次设置多个设置),这非常方便。 – Cam 2010-03-18 11:54:02

+2

我同意,我已经添加了另一个可能的SQL语句,我们在我们的ERP系统上使用这种方法,保存了很多设置。 :-) – 2010-03-18 11:56:21

+0

如果你想在“Value”中存储不同的类型,那么在你的代码中转换到你期望的类型后可以接受吗?如果你有很少的设置,它们都是不同的类型,即string,int,float,那么使用第二个模式会更有意义吗? – radtek 2016-09-29 14:19:20

0

像往常一样,这取决于。解决方案1更简单。 Sol#2可轻松与ORM集成,但可能会遇到DB行大小限制。 谷歌的OTLT(如在一个真正的查询表问题) 你有多少设置(几?几十?几百?)你多久需要它们?

+0

数十个。我可能需要每个浏览量都需要其中的一些。也就是说,管理员设置可能会在每次显示时影响某些页面的视图。例如,其中一个设置将是特色产品的名称,另一个设置将是所述产品的gif图像的文件名。 – Cam 2010-03-18 11:54:36

3

考虑第一个选项(Setting,Value)作为列。还要考虑增加额外的,元柱以及如Description(会派上用场,如果你有很多暧昧的设置),PreviousValueLastUpdatedUpdatedBy

+1

好的提示添加元列 – afarazit 2014-11-01 13:47:16