数据库架构问题

问题描述 投票:-2回答:1

我希望您帮助设计以下逻辑的数据库架构:我需要使用户的技能与公司要求相匹配,并向用户显示他/她有资格加入哪个公司。公司要求如下:

[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帐户。

提前感谢

php mysql database database-schema
1个回答
0
投票

我认为您必须执行以下操作:

1)创建一个requirements表:- ID-名称

2)创建一个users表:- ID- 名称- 姓-...

3)创建一个companies表:- ID- 名称- 地址...

确定,现在您必须将每个用户与每个需求相关联。要求可以是多个条目。将来,也许您需要将其他需求添加到列表中,因此您需要另一个表:

4)创建users_requirements表:- ID-user_id(users表的外键,id列)-require_id(requirements表的外键,id列)

在此表中,您将为链接到用户的每个需求创建一条记录。

假设我们已将此要求存储在requirements表中:

  • 1,财产保险
  • 2,房子
  • 3,社会保险号
  • 4,驾驶执照....

我们有这个users

  • 1,吉姆·罗宾逊
  • 2,珍娜·罗斯

让我们为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表:

  • ID
  • company_id(companies表的外键,id列)
  • requirement_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

    的每一项记录
    • companies_requirements表将为每个公司包含多个记录。公司requesting的每个要求的一条记录。
  • 最终查询将返回带有的列表

  • 公司名称
  • 需求名称
  • 所有用户列
  • 对于每个满足的要求都会重复进行。

请按照我说的,它将有99%在首次启动时不起作用。在最终查询中稍作练习。

我也建议插入一些UNIQUE约束:

  • users_requirements:唯一的用户ID-需求ID关联
  • companies_requirements:唯一的company_id-需求ID关联
© www.soinside.com 2019 - 2024. All rights reserved.