MySQL:阻止某些用户 - 查询和/或数据库设计的最佳方式

时间:2012-05-12 23:51:18

标签: mysql database database-design

对于社交网站,我需要在MySQL中设计一个数据库,给出以下问题:

  • 用户可以按年龄(从......到......),性别和/或地点(整个大陆或国家/地区)阻止其他用户

注意:性能超过规范化

到目前为止

表:

用户
(id,birth_date_timestamp,gender,city_id,...)

城市
(id,country_id,city_name,...)

国家/地区
(id,continent_id,country_name)

各大洲
(id,continent_name)


方法1:

不考虑阻止每个国家/地区,可以很容易地将列添加到表用户,例如
block_female, block_male, min_age, max_age, block_africa, block_europe, ...

大多数用户可能不会屏蔽各个国家/地区,因此我想添加一个block_countries字段TRUE或{{1} },并且仅当它是FALSE(各个国家/地区被屏蔽)时,请执行TRUE,其中的表格会列出已阻止的国家/地区与JOIN的对应方BR />

好主意/坏主意? (如何)这是否可能(可能带有子选择和CASE ??)这会带来良好的性能吗?这种方法对我来说似乎很模糊,所以我宁愿选择第二种方法......


方法2:

使用以下结构创建表已阻止

  • ID
  • user_id:阻止...的用户的ID
  • blocked_type:如果blocked_type为gender或continent_id或country_id
  • 已阻止:如果blocked_type为性别,则会包含user_idm;如果是大陆或国家/地区,则为fcontinent_id

...并始终执行country_id



问题: - 这些方法中的任何一种都是解决这个问题的好方法吗? - 有没有其他(更快)的方法来实现相同的结果? - 第二种方法是否会带来良好的性能,在必要的字段上有索引,在表用户中有大约5mil的行?

0 个答案:

没有答案