我很难在某种情况下优化数据库设计
有一个包含3000名员工的表和另一个包含300个部门的表。
问题是300个部门有3000名员工。基本上每个员工都会在所有部门工作300x3000记录(更糟糕的情况)。可能只有10名员工将在300个部门(最佳案例)工作,而不是问题或有复合表。
那么构建
的最佳方式是什么?请指教我
由于
答案 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条目听起来也不像是需要这种物理数据库设计优化。