我希望您帮助设计以下逻辑的数据库架构:我需要使用户的技能与公司要求相匹配,并向用户显示他/她有资格加入哪个公司。公司要求如下:
[1)公司A”需要提供公寓或房屋以及财产保险。
2)“公司B”需要5门或4门汽车,以及驾驶执照和汽车保险。
3)“公司C”需要提供社会安全号码和工作许可证。
4)“ D公司”需要公寓,公寓或房屋。
5)“ E公司”需要驾驶执照,以及2门汽车或3门汽车或4门汽车或5门汽车。
6)“ F公司”需要踏板车或自行车,或摩托车,以及驾驶执照和摩托车保险。
7)“ G公司”需要按摩资格证书和责任保险。
8)“ H公司”需要一个存放处或一个车库。
9)“ J公司”不需要任何内容,您可以来立即开始工作。“公司K”需要一个PayPal帐户。
提前感谢
我认为您必须执行以下操作:
1)创建一个requirements
表:- ID-名称
2)创建一个users
表:- ID- 名称- 姓-...
3)创建一个companies
表:- ID- 名称- 地址...
确定,现在您必须将每个用户与每个需求相关联。要求可以是多个条目。将来,也许您需要将其他需求添加到列表中,因此您需要另一个表:
4)创建users_requirements
表:- ID-user_id(users
表的外键,id列)-require_id(requirements
表的外键,id列)
在此表中,您将为链接到用户的每个需求创建一条记录。
假设我们已将此要求存储在requirements
表中:
我们有这个users
让我们为Jim Robinson分配一些满足的要求,并填充users_requirements表:
-- let's give to Jim an House
INSERT INTO `users_requirements` (`user_id`, `requirement_id`) VALUES (1, 2);
-- let's give to Jim a driver license
INSERT INTO `users_requirements` (`user_id`, `requirement_id`) VALUES (1, 4);
-- And finally a property insurance to Jenna
INSERT INTO `users_requirements` (`user_id`, `requirement_id`) VALUES (2, 1);
现在缺少的是确定每个公司需要哪些要求的标准,因此我们将能够满足每个用户满意的要求
4)使用这些列创建companies_requirements
表:
companies
表的外键,id列)requirements
表的外键,id列)现在让我们创建公司“ A”记录,以关联其要求:
-- Company A requires an house
INSERT INTO `companies_requirements` (`company_id`, `requirement_id`) VALUES (1, 2);
-- Company A requires a property insurance
INSERT INTO `companies_requirements` (`company_id`, `requirement_id`) VALUES (1, 1);
示例数据足以执行第一个测试,并检查正确的数据库模式。
您说:“我正在寻找符合条件的用户,并向用户显示他/她有资格使用哪家公司”
我为此目的建议此查询:
SELECT cp.name as company_name, req.name as requirement_name, usr.* FROM users AS usr
JOIN users_requirements AS usreq ON usreq.requirement_id = req.id
JOIN requirements AS req ON req.id = usreq.requirement_id
JOIN companies_requirements AS cpreq ON cpreq.requirement_id = req.id
JOIN companies AS cp ON cp.id = cpreq.company_id
-- let's search for Jim Robinson with user id = 1
WHERE usr.id = 1
我期望的是JOIN(不是LEFT JOIN!)将合并数据,在所有联接的表之间仅返回匹配的数据,并引用传递的用户ID。
[请以这为起点,很遗憾,我无法测试架构和查询,但是我几乎可以确定它已经接近解决方案。如果以后需要帮助,我将检查是否可以与您一起测试架构/查询。
总结:-您存储数据“源”1)有一个包含无限需求列表的表2)有一个包含无限用户列表的表3)有一个包含无限公司列表的表
然后,您需要为每个关联创建一个表:1)为每个用户分配一个需求2)一个分配给每个公司的单个需求
users_requirements表将为每个用户包含多个记录。用户satisfies。
的每一项记录最终查询将返回带有的列表
对于每个满足的要求都会重复进行。
请按照我说的,它将有99%在首次启动时不起作用。在最终查询中稍作练习。
我也建议插入一些UNIQUE约束: