我正在为一个纪念片的小型博物馆创建一个数据库。这主要是为皇家活动而制作的,但也有其他领域。因此,大多数作品都与一个人有关,应该可以搜索关于某个人的所有作品。
我遇到的问题是,在皇室成员中,一个人的名字在他们的一生中会有几次改变是很常见的。应该可以通过任何名称搜索它们,但是以任何名称显示所有部分。这些作品仍应以书面名称列出。
因此,我需要一些存储所有名称的方法,同时将它们链接在一起。然后能够轻松搜索任何名称。
我想到的两种方法是将一个外键返回到Person表的Alternate Names表,问题是搜索必须在两个表中搜索并在必要时引用回Person。我想不出这么容易。
另一种方法是列出一个表中的所有名称,并使用另一个表使用2个外键链接它们。
有没有简单的方法可以使用这些方法中的任何一种进行搜索,或者首先使用更好的方法来创建数据库?
由于
答案 0 :(得分:3)
由于Person和Name之间存在一对多关系,因此我会将其构造为:
您的查询将只是:
SELECT Foo, Bar, Name
FROM Names
JOIN Person USING(PersonID)
JOIN Piece USING(PersonID)
WHERE Names.Name LIKE '$query'
答案 1 :(得分:2)
你听起来像是在正确的轨道上。
表:
PersonPseudonyms表当然是Person和Pseudonym之间的映射表。
您应该能够轻松地将Person加入Pseudonym,方法是将Person加入PersonPseudonym,然后将Pseudonym加入PersonPseudonym,然后使用Pseudonym过滤您要搜索的名称。