我正在尝试为客户编写一个排名匹配/搜索系统,该系统将查看请求的材料(MaterialRequest 表)并找到可以提供材料并对结果进行排名的提供者(其中 userprofile.usertype_id = 1)可以提供最多或全部的材料。这是我拥有的数据库架构:
用户资料表
userprofile_id int identity
userprofile_dt datetime
first_nm varchar(50)
last_nm varchar(50)
usertype_id int (provider = 1, requestor = 2)
请求表
request_id int identity
request_dt datetime
title varchar(50)
description varchar(100)
userprofile_id int (where usertype = 2)
材料请求表
material_req_id int identity
request_id int
material_id int
MaterialProvider 表
material_pro_id int identity
userprofile_id int (where usertype = 1)
material_id int
材料表
material_id int identity
material_desc varchar(50)
因此,例如,如果我有这个请求:
request_id = 1
request_dt = 3/28/2011
title = 'test request'
desc = null
userprofile_id = 100 (where usertype_id = 2)
并要求提供这些材料
material_req_id request_id material_id
1 1 10 (steel)
2 1 11 (copper)
3 1 12 (titanium)
4 1 13 (nickel)
并且 MaterialProvider 被填充为
material_pro_id userprofile_id material_id
1 2 10 (steel)
2 2 11 (copper)
3 2 13 (nickel)
4 3 11 (copper)
5 3 13 (nickel)
6 3 12 (titanium)
我希望我的输出看起来像
userprofile_id steel copper nickel titanium pct_match
2 Y Y Y N 75
3 N Y Y Y 75
其中列名来自请求中的材料。然后能够找到可以提供超过给定百分比的所需材料的供应商。
我从一个临时表和一个游标开始
- 将列添加到临时表
- 然后遍历 3000+ 个提供者并添加那些可以提供指定材料的提供者。
有一个更好的方法吗?该过程花费的时间太长,并且希望获得有关如何编写此类内容的更好/最佳实践。