SystemSettings的表设计,最佳模型

Chr*_*s L 5 sql database-design normalization denormalization

有人建议移动一个充满设置的表,其中每列是设置名称(或类型),行是客户及其各设置的相应设置.

ID | IsAdmin | ImagePath
------------------------------
12 | 1 |\path\to\images
34 | 0 | \路径\为\图片

这样做的缺点是每次我们想要一个新的设置名称(或类型),我们改变表(通过sql)并添加新的(列)设置名称/类型.然后更新行(以便每个客户现在都有该设置的值).

新表设计方案.建议是有一个用于设置名称的列和另一个用于设置的列.
ID | SettingName | SettingValue
----------------------------
12 | IsAdmin | 1
12 | ImagePath |\path\to\images
34 | IsAdmin | 0
34 | ImagePath | \路径\为\图片

他们提出的观点是,添加新设置就像对行的简单插入语句一样简单,没有添加列.

但是对于第二种设计来说感觉不对,它看起来很糟糕,但我无法提出反对它的任何论据.我错了吗?

gbn*_*gbn 2

这是“实体属性值”模式的变体(Joel随机 SO 问题

它有一些优点和更多缺点,而且几乎肯定会以泪水结束。