2009-12-31 39 views
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。 哪一個會給出更好的性能結果?

謝謝。

回答

9

國際海事組織,你應該製作兩個表格,一個用於job_skill(job_id, skill_id),一個用於person_skills(person_id,skill_id)。兩者都指向相同的技能表。

我應該指出,性能只是一個考慮因素,並且在許多情況下,您應該首先關注數據模型的邏輯聲音設計,然後再關注性能(如果這是一個問題)。

隨着RDBMS的工作,在許多情況下(80%),最乾淨的設計也是最佳的性能。

+1

+1對於數據模型的強調 - 一個明確定義的數據模型應該在設計之前就可以滿足可能不需要的性能要求。 (如果需要非常好的性能,那麼無論如何都需要一些輔助數據模型) – 2009-12-31 13:03:18

3

我想如果我設計這個,我會有一個包含所定義技能的大師的技能表。然後我會有一個JobSkills表和PeopleSkills表。兩人都將擁有FK對主技能表的引用。

0

性能結果將取決於使用情況。人們會主要僅僅是尋找民族技能,還是僅僅尋找工作技能,或者技能與工作匹配的人?你期望頻繁更新數據嗎?對於你的數據來說什麼是可接受的「新鮮度」(即,在搜索中反映變化的速度有多快)?你使用Oracle,MSSQL,MySQL ...的系統是什麼?

對於適用於任何事情的表現,很少有通用的規則。編程不是沒有想法的。

0

我個人會使用兩個表,people_skillsjob_skills。我覺得這樣更容易想一想,並且寫下與他們的聯合。

問候
ķ

PS 如果你的兩個表曾經獲得巨大的,你可以隨時將它們移動到不同的磁盤從事繁重的查詢時減少IO爭。

相關問題