规范化和复合表结构

时间:2013-10-22 07:03:29

标签: sql database database-design relational-database

我很难在某种情况下优化数据库设计

有一个包含3000名员工的表和另一个包含300个部门的表。

问题是300个部门有3000名员工。基本上每个员工都会在所有部门工作300x3000记录(更糟糕的情况)。可能只有10名员工将在300个部门(最佳案例)工作,而不是问题或有复合表。

那么构建

的最佳方式是什么?

请指教我

由于

1 个答案:

答案 0 :(得分:3)

在关系数据库中,适当的模式是存储员工在某个部门工作的事实:

create table employees(employee_id, ..., primary key(employee_id));
create table departments(department_id, ..., primary key(department_id));
create table works_in(
  employee_id, 
  department_id, 
  primary key(employee_id, department_id),
  foreign key(employee_id) references employees(employee_id),
  foreign key(department_id) references departments(department_id)
);
/* Add column datatypes as needed */

此模式几乎适用于所有情况,即使对于大型关系表也是如此。如果您担心空间消耗,许多数据库可以非常有效地存储这种表,例如,将它们物理存储为索引组织表,例如,按employee_id分组存储它们等。

然而,即使300 x 3000条目听起来也不像是需要这种物理数据库设计优化。