2012-12-24 33 views
0

我幾乎沒有後端和數據庫設計的經驗,所以我想知道是否將數據庫中的外鍵數量減至最少是一種好的做法?將數據庫設計中的外鍵數量減至最少是否是一種好的做法

例如,讓我們考慮登錄搜索網站:

USER --hasA--> SESSION --makes--> QUERY 

在這種情況下,有用戶和會話之間的一個一對多的關係,而會話具有一對與查詢的多種關係。 session對於user_id有一個外鍵並且對於session_id有一個foreign_key是有意義的,但是如果查詢表有一個用於user_id的外鍵?爲什麼或者爲什麼不?

在此先感謝!

+1

爲什麼要將它們最小化?這些強制執行參照完整性,沒有它們,您將處於數據庫可能存儲不一致數據的地方。 – Oded

回答

2

user_id添加到QUERY會使數據庫變得冗餘。這就是爲什麼這是大多數不好的做法。在極端情況下(很少),它可能是必要的性能優化。

最小化外鍵的數量通常不是設計目標,因爲它對任何事情都沒有幫助。

典型的設計目標是建立一個乾淨的數據庫,最自然地模擬業務領域。從這個意義上說,不要將user_id添加到QUERY。但絕對是添加所有有意義的FK。這確實爲開發成本和應用可靠性提供了明顯和顯着的益處。

+0

我想我不是問這是一個設計目標,而是一個很好的啓發式要遵守。但是謝謝你! – khalid13

1

讓我們考慮一個極端的例子來展示這種方法的後果。如果將此解決方案應用於模型中的所有表格,會發生什麼情況? 讓我們擴展你的模型與一些額外的表,看看是什麼帶來了它:

draft

是現在不清楚如何?它與正確的數據庫架構?

相關問題