如何组织表来统计两个实体的统计数据?

时间:2014-04-21 14:47:49

标签: sql database

现在我只有两张桌子

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)
);

我需要创建一个或两个表来存储员工和公司统计信息。对于员工统计,我需要记住该员工以前的所有公司以及雇用日期和辞职日期。对于公司统计数据,我需要记住所有辞职的员工。在我的案例中,组织数据库结构的最佳方法是什么?

1 个答案:

答案 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