现在我只有两张桌子
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)
);我需要创建一两个表来存储员工和公司的统计数据。对于员工统计数字,我需要记住该员工的所有以前的公司,当然也需要记住雇用日期和辞职日期。对于公司的统计数字,我需要记住所有辞职的员工。在我的情况下,组织DB结构的最佳方法是什么?
发布于 2014-04-21 15:23:49
由于您有许多到多个关系,所以需要一个具有组合主键的聚合表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即可。
https://stackoverflow.com/questions/23199732
复制相似问题