繁体   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