我希望创建一个用户偏好表格,但无法确定最佳方法。ASP.NET默认的方式似乎非常笨拙,我想避免使用它。目前,我为每个用户使用一行,其中为每个用户偏好使用不同的列(未标准化,我知道)。因此,我想到的另一个想法是将偏好本身拆分成自己的表,并在用户偏好表中为每个用户的每个偏好使用一行;但是,这意味着每个偏好需要具有完全相同的数据类型,这对我来说也不太理想。因此,我的问题是:设计用于保存用户偏好值的数据库的最佳/最合适的方法是什么?
Users table (user_id, .... etc.)
.
Options table (option_id, data_type, ... etc.)
(list of things that can be set by user)
.
Preferences table (user_id, option_id, setting)
我使用了新的SQLVARIANT数据类型来设置字段,因此它可以是不同的数据类型,并将选项的数据类型作为选项定义的一部分记录在Options表中,在查询时将其转换回正确的类型。
很快,一个方法:
User(UserID, UserName, ...)
PreferenceDataType(PreferenceDataTypeID, PreferenceDataTypeName)
PreferenceDataValue(PreferenceDataValueID, PreferenceDataTypeID, IntValue, VarcharValue, BitValue, ...)
Preference(PreferenceID, PreferenceDataTypeID, PreferenceName, ...)
UserHasPreference(UserID, PreferenceID, PreferenceDataValueID)
SQL_VARIANT_PROPERTY(val,'BaseType') AS basetype, SQL_VARIANT_PROPERTY(val,'Precision') AS PRECISION, SQL_VARIANT_PROPERTY(val,'Scale') AS scale, SQL_VARIANT_PROPERTY(val,'BaseType') AS basetype, SQL_VARIANT_PROPERTY(val,'TotalBytes') AS totalbytes, SQL_VARIANT_PROPERTY(val,'Collation') AS collation, SQL_VARIANT_PROPERTY(val,'MaxLength') AS maxlength - John Gibb