1

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

拥有一个这样的技能表更好:

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)
)

或有两张表,一张用于people_skills,一张用于jobs_skills。哪一个会给出更好的性能结果?

谢谢。

4

4 回答 4

9

IMO,您应该制作两张桌子,一张job_skill(job_id, skill_id)用于person_skills(person_id,skill_id). 两者都指向相同的技能表。

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

对于 RDBMS 工作,在许多情况下(80%),最简洁的设计也最有利于性能。

于 2009-12-31T12:59:21.097 回答
3

我想如果我设计这个,我会有一个包含已定义技能领域的主技能表。然后我会有一个 JobSkills 表和 PeopleSkills 表。两者都有对主技能表的 FK 引用。

于 2009-12-31T12:57:37.267 回答
0

性能结果将取决于使用情况。人们会主要寻找人的技能,还是工作技能,或者技能与工作相匹配的人?您期望数据的频繁更新吗?您的数据可接受的“新鲜度”是多少(即,更改应多快反映在搜索中)?您使用的是什么系统,Oracle、MSSQL、MySQL ......?

很少有通用的性能规则适用于任何事情。编程并不是那么无思想。

于 2009-12-31T12:57:57.510 回答
0

就我个人而言,我会使用两个表,people_skills并且job_skills. 我发现以这种方式考虑它并针对它们编写联接更容易。

问候
K

PS 如果您的两个表变得很大,您可以随时将它们移动到单独的磁盘以减少执行繁重查询时的 io 争用。

于 2009-12-31T13:01:02.593 回答