我正在尝试为SQL Server 2008 R2中的用户设置设计有效的数据库架构。这里的皱纹是我们需要多个级别的粒度,我不确定如何有效地表示它。
我们有一些设置可以应用于完整的帐户,单个模块或特定的功能。目前,表格的设置方式是:
AccountId int
ModuleId int
FeatureId int
SettingData string
(请不要挂断SettingData是什么或不是什么,我只是在示例中将其作为一个字符串,以区别于其他ID)。
问题:许多客户可以访问许多模块,这些模块可以访问许多功能。对SettingData进行更改的单个帐户可以修改4000条记录。由于显而易见的原因,这绝对不可行,我决心解决它。
解决方案显然是有几个不同的表,根据它们的用法,可以相互覆盖并允许一些帐户范围的设置和粒度偏好。但是,我以前从未这样做过,而我设计它的尝试最终看起来令人不安地类似于我们目前的低效表结构。
在此先感谢,感谢任何帮助。
答案 0 :(得分:1)
听起来好像当前可以在以下级别指定设置:
鉴于可能已经为帐户,模块和功能中的每一个设置了表格,它似乎有意义:
由于一般原则是特定应覆盖常规,因此模块级设置应覆盖帐户级设置,并且功能级设置应覆盖模块级设置。
这种方法的优点是,每当更新特定设置时,只需要更新一条记录。
缺点是要确定哪个设置应该应用于特定模块中的特定功能(对于特定帐户),则必须查询3个表而不是一个。