代码之家  ›  专栏  ›  技术社区  ›  aviv

一般来说,在数据库设计中,一个表有两个引用还是一个表更好?

  •  1
  • aviv  · 技术社区  · 16 年前

    假设我有人在找工作,我有一份工作清单。 所以我有两张桌子: 人员和工作。 现在我有了一份这个人的技能列表,并且我有了一份满足工作要求的技能列表。

    有这样一张技能表更好的是:

    CREATE TABLE skills_reference
    (
    id INT,
    reference_id INT, -- can reference people(id) or job(id)
    reference ENUM('person','job'),
    skill FOREIGN KEY REFERENCE skills(id)
    )
    

    或者有两张桌子,一张给人技能,一张给工作技能。 哪一个能提供更好的性能结果?

    谢谢。

    4 回复  |  直到 16 年前
        1
  •  9
  •   Roland Bouman    16 年前

    依我看,你应该订两张桌子,一张给 job_skill(job_id, skill_id) 一个 person_skills(person_id,skill_id) . 不过,这两个都指向相同的技能表。

    我应该指出,性能只是一个考虑因素,在许多情况下,您应该首先关注数据模型的逻辑声音设计,然后关注性能(如果这是一个问题的话)。

    在RDBMS工作的情况下,在许多情况下(80%),最干净的设计也是最好的性能。

        2
  •  3
  •   Randy Minder    16 年前

    我想如果我在设计这个的话,我会有一个包含定义技能的世界的主技能表。然后我会有一个工作技能表和人员技能表。两者都有一个对主技能表的FK引用。

        3
  •  0
  •   Russell Steen    16 年前

    性能结果将取决于使用情况。人们主要是在寻找人的技能,还是仅仅是工作技能,或者那些技能与工作匹配的人?您希望经常更新数据吗?什么是可接受的“新鲜度”对您的数据(即,变化应该多快反映在搜索中)?您使用的是什么系统Oracle、MSSQL、MySQL…?

    几乎没有适用于任何事物的通用性能规则。编程就是不自由。

        4
  •  0
  •   Khb    16 年前

    我个人会用两张桌子, people_skills job_skills . 我发现这样想更容易,也更容易针对它们编写连接。

    当做
    K

    聚苯乙烯 如果您的两个表变得很大,那么在执行大量查询时,您可以将它们移动到单独的磁盘上,以减少IO争用。