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

Posted

技术标签:

【中文标题】动态(变量)数据库表名与存储在列中的变量【英文标题】:Dynamic (variable) database table name versus variable stored in column 【发布时间】:2012-08-17 22:09:58 【问题描述】:

创建员工管理系统。

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 家公司工作。有数以百万计的员工。基于编码标准,安全性和速度,哪个更好。

    为每个公司创建一个单独的表,然后动态引用该表。例子。 tbl_companya_employees、tbl_companyb_employees、tbl_companyc_employees

    将 company_name 列添加到 tbl_employees 表中

为什么?谢谢。

【问题讨论】:

【参考方案1】:

添加一个名为 company 的新表。

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

然后将 company_id 列添加到员工表中。

更好的是,如果你想保留的不仅仅是员工的 CURRENT 公司,创建一个employee_company_history 表:

employee_company_history
    employee_id
    company_id 
    start_date
    end_date

【讨论】:

【参考方案2】:

最好在员工表中有一个公司列,这将允许您编写适用于任何公司的通用联接。如果您有单独的表,则必须编写代码来为相应的公司生成动态查询。

【讨论】:

以上是关于动态(变量)数据库表名与存储在列中的变量的主要内容,如果未能解决你的问题,请参考以下文章

sql server存储过程如何动态生成表名

oraclede中数据定义语言

获取 ComboBox 变量以存储在 MySQL 中

RODBC::sqlSave() 创建表,警告:在列中截断为 255 个字节?

将表列值存储到变量中(SQL Server)

如何从以 BLOB 类型存储在列中的 XML 中提取数据(通过 SQL 查询)