我有大约50k(和计数)产品的数据库。此外,我网站上的用户已宣布其所在国家/地区。
现在我需要添加到allowed_countries
和blocked_countries
等产品字段。
allowed_countries
- 仅向该国家/地区的用户显示blocked_countries
- 除了来自blocked_countries
列表的用户外,它将向所有用户显示。此类过滤应适用于产品目录,产品页面和搜索者(目前全文搜索)。
如何有效地为这些要求设计数据库?我所关心的是在相当大的负荷下的表现。我在考虑MariaDB 10.0.20中的动态列,但我不确定只有一个国家的过滤速度。
答案 0 :(得分:2)
使用链接表
产品表 (id,其他数据)
国家表 (id,name等)
链接表 (product_id,country_id,allowed)all not null,1表示允许0表示diallowed
select * from product
left join linking linking_table on linking_table.product_id = product.id
left join counties_table on (countries_table.id = linking_table.country_id)
现在这里改变了
允许县
where countries_table.id = (USERS COUNTRY) and linking_table.allowed = 1
不允许
where countries_table.id = (USERS COUNTRY) and (linking_table.allowed = 1 or linking_table.allowed is null)
第二个增加了产品没有任何黑名单的情况。
这可能会为每个产品返回多行,因此您需要分组依据或返回不同的