簡體   English   中英

SQL Server松耦合表-性能考慮?

[英]SQL Server loosely coupled tables - performance considerations?

我正在從頭開始為新應用程序構建數據庫架構,我的兩個目標是松散耦合(可伸縮性)和性能(但是性能是最重要的)。 我不確定在中央表中包含外鍵列是否是一個好主意。 使用示例可以更好地理解我的問題(請記住,該示例純粹是假設的):

我們有一個表,我們稱此表為“動物”。 在此表中,我們有幾個條目,這些條目將為數據庫中存儲的各種類型的“動物”定義屬性。 我們還有另一個名為“ AnimalName”的表,其目的是將每種動物的名稱與語言ID一起存儲在“ Animal”表中(因此,我們有一個表將“ “動物”表(每種語言)。

我有兩種方法可以實現上述表格:

第一路

動物表:AnimalID(PK)
AnimalName表:AnimalNameID(PK),AnimalID(FK),LanguageID(FK),名稱

查詢看起來像這樣:

SELECT * FROM Animal a JOIN AnimalName an ON an.AnimalID = a.AnimalID and an.LanguageID = ? WHERE a.AnimalID = ?

第二路

動物表:AnimalID(PK),AnimalNameID(FK)
AnimalName表:AnimalNameID(PK),LanguageID(FK),名稱

查詢看起來像這樣:

SELECT * FROM Animal a JOIN AnimalName an ON an.AnimalNameID = a.AnimalNameID and an.LanguageID = ? WHERE a.AnimalID = ?

對於第二種方法,如果我要在AnimalName表中添加“ AnimalID” FK列,則它也將支持以第一種方法表示的查詢。

以上哪一種方法將提供最快的性能(這很關鍵!)? 您通常會根據經驗推薦上述哪一種方法?

在此先感謝所有回答!

只有第一種方法可以正確地為您描述的問題建模: 一種動物有很多名字,每種語言都有一個名字 用第二種方式對動物進行建模的名稱只有一個名稱,該名稱恰好是foo語言 ,與您的問題描述完全不同。

對於您描述的這種查詢,AnimalNames表必須由(AnimalId, LanguageId)唯一地聚集(AnimalId, LanguageId)並且主鍵必須作為非聚集約束,甚至更好地完全處置AnimalLanguageID PK並為(AnimalID, LanguageID)

另外,您必須閱讀設計索引

第一種方法為您提供了Animals和AnimalName之間的標准一對多關系,從而為每個Animal提供了許多名稱,這很有意義。

通過第二種方法,每個動物都只能獲得一個名稱,並且可以為許多動物指定一個名稱,這沒有意義。

第二種方法更好。 AnimalName和Animal將具有一對多關系,在這里更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM