我正在为我的CMS的用户模块添加一个新功能,但遇到了难题...或者说,遇到了岔路口,我想在做出决定之前从stackoverflow上获得一些意见。
基本上,我想允许管理员添加新的“额外”用户字段,用户可以在注册时填写、在个人资料中编辑和/或由其他模块控制。其中一个例子是生日字段、自我介绍或者用户在网站上获得的积分。不用说,存储的数据将是各种各样的,范围从大量文本到小整数值不等。更糟糕的是 - 我希望有搜索此数据的选项。
那么,最好的方法是什么呢?现在,我倾向于拥有以下列的表。
我更喜欢第一种方法,因为这将使搜索速度显着更快,并且引用表(包含所有字段数据的表,例如字段名称、是否可搜索等)可以引用存储该字段数据时应使用的列。
基本上,我想允许管理员添加新的“额外”用户字段,用户可以在注册时填写、在个人资料中编辑和/或由其他模块控制。其中一个例子是生日字段、自我介绍或者用户在网站上获得的积分。不用说,存储的数据将是各种各样的,范围从大量文本到小整数值不等。更糟糕的是 - 我希望有搜索此数据的选项。
那么,最好的方法是什么呢?现在,我倾向于拥有以下列的表。
userid, refFieldID, varchar, tinyint, smallint, int, text, date, datetime, etc.
我更喜欢第一种方法,因为这将使搜索速度显着更快,并且引用表(包含所有字段数据的表,例如字段名称、是否可搜索等)可以引用存储该字段数据时应使用的列。
另一个想法是,有人向我建议并在其他解决方案中看到过(例如vBulletin,尽管我已经看到其他一些名字我暂时想不起来的解决方案),其中只有userid、参考id和medtext字段。我对MySQL了解得不够深入,无法确定这种方法是否会更慢,可能会有更大的开销。
那么哪种方法最好呢?还有其他我没有考虑到的方法吗?无论我最终使用哪种方法,它都需要快速搜索,不会占用太多空间(稍微有点开销也没关系),最好允许对数据进行复杂查询。