【发布时间】:2016-02-05 14:54:58
【问题描述】:
我有一个用户系统。每个用户都有一个配置文件。配置文件字段动态存储在数据库中。数据库如下:
CREATE TABLE profileFields(
profileField_id INT(255) AUTO_INCREMENT,
profileField_name VARCHAR(255),
profileField_value VARCHAR(255),
profileField_type VARCHAR(255),
profileField_isOptional TINYINT(1),
PRIMARY KEY(profileField_id)
);
CREATE TABLE users(
user_id INT(255) AUTO_INCREMENT,
user_username VARCHAR(255),
user_password VARCHAR(255),
user_email VARCHAR(255),
PRIMARY KEY(user_id)
);
CREATE TABLE profileValues(
profileValue_id INT(255) AUTO_INCREMENT,
profileValue_profileField_id INT(255),
profileValue_user_id INT(255),
profileValue_value VARCHAR(255),
PRIMARY KEY(profileValue_id)
);
我正在尝试获取包含所有配置文件字段和值的所有用户的列表。 我总共有 50.000 个用户和 60 个配置文件字段,产生 3.000.000 个配置文件值。
检索此类列表(并可能根据配置文件字段执行搜索)的最有效方法是什么?
【问题讨论】:
-
请提供您要生成的数据示例。
-
我看不出这些表是如何相互关联的。你应该怎么加入? 50.000 * 60 = 3.000.000,但这似乎只有两张桌子?
-
所有配置文件都包含全部 60 个值吗?因为如果是这样,你不需要进一步分解它,
-
@jarlh 查看此信息,看起来
profileValues是最上面的表,但我也看不到 60 x 50,000 部分 -
3M 记录必须已经在 profileValues 中。