我正在创建一个成员网站,我目前正在处理用户首选项设置。我应该创建一个包含所有首选项字段(大约17个字段)的表,还是应该将它们与帐户设置一起包含在主成员表中?
表格中应该有多少字段是否有限制?目前成员表有大约21个字段...当我可以轻松地将它们放在另一个表中时,不确定是否可以添加另外17个字段。虽然有任何建议,但需要更多编码来提取数据?
答案 0 :(得分:3)
我会将它们分开以保持可维护性。一个查询可以拉出所有这些。差异应该可以忽略不计
答案 1 :(得分:2)
分为三个表:
MySQL有一个hard limit of 4,096 columns,但依靠这些知识并不理想。上面的表结构允许您添加或删除首选项,而无需使用ALTER TABLE语句。它还将支持查询具体给定偏好的人。
答案 2 :(得分:0)
取决于。
对于小型网站,将所有内容都塞入一个表可能需要较少的编码(不需要加入)。而且由于用户偏好似乎是1:1的用户帐户,这是我倾向于支持的。此外,对于连接,如果数据库已损坏或未正确约束,则可能存在给定用户不存在用户首选项。
表中字段的限制取决于您的引擎。 5.5的答案可以在http://dev.mysql.com/doc/refman/5.5/en/column-count-limit.html找到。
答案 3 :(得分:0)
21个领域相当多。这不是MySQL的问题,但我更喜欢单独的表。
如果稍后可能会有更多偏好,您甚至可以考虑首选项的通用3列表。列如下:
UserID
PreferenceName
PreferenceValue
每个用户首选项占一行。您可能希望添加第4列以存储值列表。有效使用这种类型的数据库模型需要支持多个结果集(因此您可以一次性获取所有首选项的用户信息)。您可能想要检查数据库访问技术是否支持它们。
当然,使用这种方法,您将无法为每个首选项选择数据类型。作为优势,您可以扩展此模型以创建“首选项”表,您可以在其中为每个首选项定义默认值。
# Fetch all preferences for a user, using defaults where no preferences are given
SELECT p.PreferenceName, COALESCE(up.PreferenceValue, p.DefaultValue)
FROM Preference p
LEFT OUTER JOIN UserPreference up ON up.PreferenceID = p.ID
WHERE up.UserID = ?
这样您就可以轻松更改网站的默认设置。