【问题标题】:Two links between 2 tables两个表之间的两个链接
【发布时间】:2016-10-15 19:19:48
【问题描述】:

我的数据库中有 2 个表正在尝试在 mysql 工作台中设计。

1 表 - 公司

 1. ID
 2. Company
 3. Company_Number
 4. Created_Date

2 表 - 员工

 1. ID
 2. Employee
 3. Company_Number
 4. Created_Date

我想在公司和员工之间建立关系。 1 公司可以有多名员工。问题是我不能将 Company_Number 作为主键,因为这些键可能会重复,因为每天都会转储数据。此外,一名员工可以为多名员工工作,但对于每家公司,他/她将有一个额外的数据行。

有没有办法在这两个表之间建立两个关系? 1 对 1 created_date - created_date & 一对多 company_number 到 company_number

【问题讨论】:

  • 通常的方法是创建一个表company_empoyee,其中包含(companyid, employeeid) 列(两者的组合是该表的主键,两者都引用基表)。我看不出这会成为问题的原因。如果您转储数据(我没有得到那部分),请使用临时表。
  • @Solarflare 我试图找到最常见的做法。好吧,我的意思是说,每天都会有一份为所有这些公司工作的公司和工人的列表添加到数据库中,这就是为什么我不知道主键应该是什么,因为每天的数据都会非常相似。
  • 这是一个有趣的语义问题。在组织与个人之间的关系完成之前,员工不是员工。在这个解决方案上,我必须同意 Solarflare。您提出的结构非常“封闭”,不允许员工离职。看了你上面的评论后,我有一个问题:这更像是一种仓储工作吗?
  • 基本上我正在收集具有相同索引的公司,并且在员工中我将存储这些员工(官员)的姓名和公司中的职位。每个员工可以为多家公司工作,可以担任不同的职位。
  • 我理解正确吗?对于每次新的导入,您将在公司表中多次添加同一公司?不要那样做。如果您绝对需要,您可以创建一个history-table,在其中为每个导入添加一行。但是公司表应该只有一行代表一家公司。对员工也一样。而company_employee 将允许您拥有多个连接:将例如(1,1), (1,2), (2,2) 添加到您的表中,然后工人1 为公司1 工作,工人2 为公司12 工作。 (所以一个公司可以有多个工人,一个工人可以为多个公司工作)

标签: mysql sql mysql-workbench


【解决方案1】:

Employee 表中删除Company_Number,然后创建一个新表,假设WorksFor 有两列ID_Company,ID_Employee,created_table 并将这两列设为主键

【讨论】:

  • 另外,有一些标志状态列来识别员工是活跃还是终止。
【解决方案2】:

company_number 上的内部连接为您提供关系

select c.* e.*
from Company as c
INNER JOIN Employees as e on e.company_number = c.Company_number

你也可以在两列上创建关系

select c.* e.*
from Company as c
INNER JOIN Employees as e on 
       (e.company_number = c.Company_number and e.Created_Date = c.Created_Date)

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 2013-08-06
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2011-03-06
    • 2011-08-29
    相关资源
    最近更新 更多