【发布时间】:2018-10-27 11:59:38
【问题描述】:
我想为 UserPreferences 创建一个表。每个用户都有一组有限的用户偏好。所以这可以通过两种方式建模:
- 宽表:UserPreferenceByUser(id int, userid int, preference1 int, 首选项2 int)
- 一张高大的桌子:UserPreferenceByCode(id int, userid int, code nvarchar(25), 值 int)
速度因素并不重要,因为它们会在应用启动时被检索一次。
1的优缺点:
- 在客户端,一个对象包含所有首选项。 (更容易在客户端使用)
- 但是,每次添加首选项时,都必须修改表并更新应用程序。
- 默认偏好值可以放默认值 领域。
2 的优缺点:
- 在客户端,一个数组保存首选项。 (更难使用)
- 如果添加了新首选项,则无需更改数据模型。但是,当添加新用户时,没有默认首选项。
- 如果查找首选项但未找到,则必须添加新记录,在另一个表 (DefaultUserPreferences) 中查找默认首选项值。
我是否遗漏了上述任何优点或缺点?
在我看来,理想的解决方案是将数据存储为 UserPreferenceByCode,然后返回一组数据,使其在客户端上显示为 UserPreferenceByUser。
【问题讨论】:
标签: sql sql-server sql-server-2012