实现具有替代名称并将所有名称链接在一起的人员数据库

时间:2011-05-20 17:12:53

标签: sql database-design

我正在为一个纪念片的小型博物馆创建一个数据库。这主要是为皇家活动而制作的,但也有其他领域。因此,大多数作品都与一个人有关,应该可以搜索关于某个人的所有作品。

我遇到的问题是,在皇室成员中,一个人的名字在他们的一生中会有几次改变是很常见的。应该可以通过任何名称搜索它们,但是以任何名称显示所有部分。这些作品仍应以书面名称列出。

因此,我需要一些存储所有名称的方法,同时将它们链接在一起。然后能够轻松搜索任何名称。

我想到的两种方法是将一个外键返回到Person表的Alternate Names表,问题是搜索必须在两个表中搜索并在必要时引用回Person。我想不出这么容易。

另一种方法是列出一个表中的所有名称,并使用另一个表使用2个外键链接它们。

有没有简单的方法可以使用这些方法中的任何一种进行搜索,或者首先使用更好的方法来创建数据库?

由于

2 个答案:

答案 0 :(得分:3)

由于Person和Name之间存在一对多关系,因此我会将其构造为:

  • Piece:PieceID,PersonID,Foo,...
  • 人:PersonID,Bar,......
  • 名称:NameID,PersonID,Name,...

您的查询将只是:

SELECT Foo, Bar, Name
FROM Names
    JOIN Person USING(PersonID)
    JOIN Piece USING(PersonID)
WHERE Names.Name LIKE '$query'

答案 1 :(得分:2)

你听起来像是在正确的轨道上。

表:

  • 笔名
  • PersonPsuedonym

PersonPseudonyms表当然是Person和Pseudonym之间的映射表。

您应该能够轻松地将Person加入Pseudonym,方法是将Person加入PersonPseudonym,然后将Pseudonym加入PersonPseudonym,然后使用Pseudonym过滤您要搜索的名称。