2

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

一张桌子有 3000 名员工,另一张桌子有 300 个部门。

问题是可能有 300 个部门的 3000 名员工。基本上每个员工都将在所有部门工作 300x3000 记录(更糟糕的情况)。可能只有 10 名员工将在 300 个部门工作(最好的情况)并且没有问题或有一个复合表。

那么什么是最好的结构方式

请给我建议

谢谢

4

1 回答 1

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 的条目听起来也不像是需要这种物理数据库设计优化。

于 2013-10-22T07:35:00.207 回答