现在我只有两张桌子
CREATE TABLE IF NOT EXISTS company (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (250) NOT NULL
);
CREATE TABLE IF NOT EXISTS employee (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (250),
company_id INT,
FOREIGN KEY (company_id) REFERENCES Company (id)
);
我需要创建一个或两个表来存储员工和公司统计信息。对于员工统计,我需要记住该员工以前的所有公司以及雇用日期和辞职日期。对于公司统计数据,我需要记住所有辞职的员工。在我的案例中,组织数据库结构的最佳方法是什么?
答案 0 :(得分:1)
由于您拥有多对多关系,因此您需要一个具有组合主键的聚合表company_employee
,因此您需要:
CREATE TABLE IF NOT EXISTS company (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (250) NOT NULL
);
CREATE TABLE IF NOT EXISTS employee (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (250)
);
CREATE TABLE IF NOT EXISTS company_employee (
company_id INT NOT NULL,
employee_id INT NOT NULL,
hire_date DATE,
resign_date DATE,
FOREIGN KEY (company_id) REFERENCES Company (id),
FOREIGN KEY (employee_id) REFERENCES Employee (id)
);
因此,如果您想要聚合表中的任何内容,只需在相应表的键上使用JOIN
。