对于社交网站,我需要在MySQL中设计一个数据库,给出以下问题:
注意:性能超过规范化
用户
(id,birth_date_timestamp,gender,city_id,...)
城市
(id,country_id,city_name,...)
国家/地区
(id,continent_id,country_name)
各大洲
(id,continent_name)
不考虑阻止每个国家/地区,可以很容易地将列添加到表用户,例如
block_female, block_male, min_age, max_age, block_africa, block_europe, ...
大多数用户可能不会屏蔽各个国家/地区,因此我想添加一个block_countries
字段TRUE
或{{1} },并且仅当它是FALSE
(各个国家/地区被屏蔽)时,请执行TRUE
,其中的表格会列出已阻止的国家/地区与JOIN
的对应方BR />
好主意/坏主意? (如何)这是否可能(可能带有子选择和CASE ??)这会带来良好的性能吗?这种方法对我来说似乎很模糊,所以我宁愿选择第二种方法......
使用以下结构创建表已阻止:
user_id
或m
;如果是大陆或国家/地区,则为f
或continent_id
...并始终执行country_id
问题:
- 这些方法中的任何一种都是解决这个问题的好方法吗?
- 有没有其他(更快)的方法来实现相同的结果?
- 第二种方法是否会带来良好的性能,在必要的字段上有索引,在表用户中有大约5mil的行?