我正在从头开始为新应用程序构建数据库模式,我的两个目标是松散耦合(可扩展性)和性能(但性能是最重要的)。我不确定在中央表中包含外键列是否是个好主意。使用示例可能会最好地理解我的问题(请记住,此示例纯属假设):
我们有一张桌子,我们称这张桌子为“动物”。在这个表中,我们有几个条目,它们将为存储在数据库中的各种类型的“动物”定义属性。我们还有另一个名为“AnimalName”的表,其目的是将每个动物的名称与语言 ID 一起存储在“动物”表中(因此我们有一个表,将每个动物的名称存储在“每种语言的动物”表)。
我有两种实现上述表格的方法:
第一种方式
Animal 表:AnimalID (PK)
AnimalName 表:AnimalNameID (PK)、AnimalID (FK)、LanguageID (FK)、Name
查询看起来像这样:
SELECT * FROM Animal a JOIN AnimalName an ON an.AnimalID = a.AnimalID and an.LanguageID = ? WHERE a.AnimalID = ?
第二种方式
Animal 表:AnimalID (PK)、AnimalNameID (FK)
AnimalName 表:AnimalNameID (PK)、LanguageID (FK)、Name
查询看起来像这样:
SELECT * FROM Animal a JOIN AnimalName an ON an.AnimalNameID = a.AnimalNameID and an.LanguageID = ? WHERE a.AnimalID = ?
对于第二种方式,如果我要在 AnimalName 表中添加一个“AnimalID”FK 列,那么它也将支持第一种方式表示的查询。
以上哪一种方法将提供最快的性能(这是至关重要的!)?根据您的经验,您通常会推荐上述哪种方法?
非常感谢所有回答的人!