[英]SQL Server 2008 Table Structure with Guid Performance Considerations
[英]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.