设计多雇主员工的最有效方法

uqjltbpv  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(235)
CREATE TABLE IF NOT EXISTS `default_schema`.`Employee` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `first_name` VARCHAR(200) NOT NULL,
  `_last_name` VARCHAR(200) NOT NULL,
  `employee_id` INT(11) NULL,
  `employer_id` INT(11) NOT NULL,
  PRIMARY KEY (`id`),

CREATE TABLE IF NOT EXISTS `default_schema`.`contractor` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `contractor_name` VARCHAR(200) NOT NULL,
  `contract_number` VARCHAR(20) NOT NULL,
  `contract_term` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`),

“雇员”可以有许多不同的雇主(“承包商”)。那么,在数据库中显示这一点的最佳方式是什么呢?在“employee”中创建几个字段,如“employer1”、“employer2”等,或者创建第三个表来描述雇员和雇主之间的关系

omvjsjqw

omvjsjqw1#

我们通常通过引入第三个表来解决多对多关系,该表由不同的名称调用。。。关系表、连接表、连接表等。
例如:

CREATE TABLE `employment` 
( employee_id   INT(11) NOT NULL  COMMENT 'PK, FK ref employee.id'
, contractor_id INT(11) NOT NULL  COMMENT 'PK, FK ref contractor.id'
, PRIMARY KEY (employee_id, contractor_id)
, UNIQUE KEY employment_UX2 (contractor_id, employee_id)
, CONSTRAINT FK_employment_contractor FOREIGN KEY contractor_id REFERENCES contractor(id) 
, CONSTRAINT FK_employment_employee   FOREIGN KEY employee_id   REFERENCES employee(id)
)

为了表示“雇员”和“承包商”之间的关系,我们在此表中插入一行。
有时候,这种关系本身可能有一些属性。在本例中,可能有一些日期需要跟踪(合同、开始、终止)。可能存在状态(“已协商”、“正在进行”、“已完成”…)

mftmpeh8

mftmpeh82#

新领域 employee table无法缩放。你必须事先知道一个雇员能拥有的雇主的最大数量(这是肯定会改变的)。最好将其建模为一个雇员的多个行,每个行代表不同的雇主。这最好在第三个表中完成,该表用于将雇员和雇主合并,因为雇主也可以有多个雇员。

相关问题