动态(变量)数据库表名与存储在列中的变量

时间:2012-08-17 22:09:58

标签: mysql database-design query-optimization scaling dynamic-tables

创建员工管理系统。

CREATE TABLE IF NOT EXISTS `tbl_employees` (
  `employee_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `start_date` DATE NOT NULL,
  `end_date` DATE NOT NULL,
  PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

有10家员工可以工作的公司。有数百万的员工。基于编码标准,安全性和速度,这是更好的。

  1. 每个公司的单独表格,然后动态引用。例。 tbl_companya_employees,tbl_companyb_employees,tbl_companyc_employees OR

  2. 将company_name列添加到tbl_employees表

  3. 为什么?谢谢。

2 个答案:

答案 0 :(得分:2)

最好在employee表中有一个公司列,这样你就可以编写适用于任何公司的通用连接。如果您有一个单独的表,则必须编写为相应公司生成动态查询的代码。

答案 1 :(得分:2)

添加一个名为company。的新表。

company 
    company_id int primary_key autoincrement whatever,
    name varchar,
    ... other details ...

然后将company_id列添加到employee表。

更好的是,如果您希望保留的不仅仅是员工的CURRENT公司,请创建employee_company_history表:

employee_company_history
    employee_id
    company_id 
    start_date
    end_date