求高效程序的表结构设计
现假设有一在线商品预订的平台,该平台可以提供全国每个城市所加盟到平台中的商家的产品,若有个栏目为"指定商家的商品"的栏目,有以下要求:
1.该栏目显示的商品都为用户自己所设置为收藏的商家产品,
2.买家用户注册到平台的时候,平台中所有的商家都是默认为被收藏进来的(这样有利于平台的推广,可以让后来加入到平台的商家可以默认加入到该栏目中)
3.若用户有不需要收藏的商家,则用户可以自行取消收藏,这样这家商家的产品就不会在这个栏目显示了
我现在的设计是:使用1个表来存储被取消收藏的商家,这样这个栏目在取商品数据的时候,再把这个表中的商家的商品给排除掉.但这样的设计有个不好的情况就是sql查询效率就不高了,因为查询是用来排除数据的,要使用到 not in 或 not exitis ,索引等就无法使用了
需要求助的就是有什么好的设计方案可以避免这样的设计.
表结构主要字段设计如下:
商品表(tbl_Product):
ID 商品编号 char(36),
CompanyID 商家的公司ID
.......
取消收藏的关联表(tbl_CancelFav):
BuyUserId int 买家用户ID
CompanyID 被取消收藏的商家公司ID
查询sql语句大致为:
select * from tbl_Product where CompanyID not in (select CompanyID from tbl_CancelFav where BuyUserId=@BuyUserId)