【问题标题】:Normalizing and composite table structure规范化和复合表结构
【发布时间】:2013-10-22 07:03:29
【问题描述】:

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

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

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

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

请给我建议

谢谢

【问题讨论】:

    标签: sql database database-design relational-database


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,你说的都是对的,但是如果出现这样的情况并且数据量很大,那么正确索引是优化设计的唯一方法吗?
    • 是的,即使对于大量数据,在几乎所有多对多关系的情况下,在关系数据模型中选择正确的设计也是如此。对于这种设计,可以在物理级别上进行许多优化:索引组织表和索引压缩以及压缩存储是您的一些朋友,如果您想减少空间消耗,分区也变得很重要。调整逻辑数据库设计应该始终是您的最后手段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多