数据库:将一种记录与多个其他表相关联

时间:2011-02-24 23:19:02

标签: database-design

将一种类型的对象与多种其他对象之一相关联的最佳方法是什么?

例如,一个简化的场景:

tblNews (_newsId_, _title_) 
1, Hello world
2, Lorem ipsum

tblPeople (_personId_, _personName_) 
1, John Smith
2, Joe Bloggs

tblPlaces (_placeId_, _placeName_)
1, Townville
2, Smallplace

定义tblNews中的项目与人员和地点之间的关系的最佳方法是什么(例如,新闻项目newsId = 1(Hello world)可能与person personId = 2(Joe Bloggs)相关并且PlaceId = 1 (Townville))?我考虑过使用两个表:

tblObjectTypes (_typeName_, _typeTable_, _typePK_)
person, tblPeople, personId
place, tblPlaces, placeId

tblNewsRelationships (_relationshipId_, _newsId_, _objectType_, _objectKey_)
1, 1, person, 2
2, 1, place, 1

这里tblNewsRelationship定义关系中的哪个新闻项,它涉及哪种类型的对象以及该对象的主键。

tblObjectTypes包含新闻项可能涉及的每种类型的对象,该类对象存储在哪个表中以及应该使用哪个字段来查找它们。代码将转到tblObjectTypes,查找关系中定义的objectType,并使用给定的typeTable和typePK来查找给定其objectKey的正确记录。

但是,这看起来似乎应该是一个常见的问题,这似乎非常令人费解。我进行了搜索和搜索,但是如果不知道描述这种关系的术语,就找不到任何有用的东西,所以我不知道是否有一种“正确”的方式来创建这种关系。

很抱歉提出这么长的问题。

1 个答案:

答案 0 :(得分:1)

新闻项目可以与某个人和某个地方相关,对吧?因此,新闻表应该有一个名为person_id的列和一个名为place_id的列。每个新闻行都有相应人员或地点的相应身份证号码。

“外键”是您想要的术语。