我很难在某种情况下优化数据库设计
一张桌子有 3000 名员工,另一张桌子有 300 个部门。
问题是可能有 300 个部门的 3000 名员工。基本上每个员工都将在所有部门工作 300x3000 记录(更糟糕的情况)。可能只有 10 名员工将在 300 个部门工作(最好的情况)并且没有问题或有一个复合表。
那么什么是最好的结构方式
请给我建议
谢谢
我很难在某种情况下优化数据库设计
一张桌子有 3000 名员工,另一张桌子有 300 个部门。
问题是可能有 300 个部门的 3000 名员工。基本上每个员工都将在所有部门工作 300x3000 记录(更糟糕的情况)。可能只有 10 名员工将在 300 个部门工作(最好的情况)并且没有问题或有一个复合表。
那么什么是最好的结构方式
请给我建议
谢谢
在关系数据库中,适当的模式是将员工在部门工作的事实存储为关系:
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 的条目听起来也不像是需要这种物理数据库设计优化。