4 Stimmen

Implementierung einer Datenbank von Personen, die alternative Namen haben und alle Namen miteinander verknüpfen

Ich erstelle eine Datenbank für ein kleines Museum mit Gedenkstücken. Diese sind größtenteils für königliche Veranstaltungen gemacht, aber es gibt auch andere Bereiche. Daher sind die meisten Stücke mit einer Person verbunden und es sollte möglich sein, nach allen Stücken über eine bestimmte Person zu suchen.

Das Problem, das ich habe, ist, dass es in königlichen Kreisen recht häufig vorkommt, dass der Name einer Person sich im Laufe ihres Lebens ändert, manchmal sogar mehrmals. Es sollte möglich sein, nach ihnen mit jedem Namen zu suchen, aber alle Stücke unter jedem Namen aufzulisten. Die Stücke sollten weiterhin unter dem Namen aufgeführt sein, der aufgeschrieben ist.

Daher benötige ich eine Möglichkeit, alle Namen zu speichern und sie dort zu verknüpfen, wo es relevant ist. Dann sollte es einfach möglich sein, nach jedem beliebigen Namen zu suchen.

Die beiden Möglichkeiten, die mir eingefallen sind, sind eine Tabelle mit Alternativnamen, die eine Fremdschlüsselverbindung zur Personentabelle hat. Das Problem dabei ist, dass eine Suche in beiden Tabellen erfolgen muss und bei Bedarf wieder zurück zur Person verweist. Ich kann mir nicht vorstellen, wie man das einfach machen soll.

Der andere Weg wäre, alle Namen in einer Tabelle aufzulisten und eine andere Tabelle zu haben, die sie mit 2 Fremdschlüsseln verknüpft.

Gibt es einen einfachen Weg, nach einer dieser Methoden zu suchen, oder eine bessere Methode, um die Datenbank überhaupt zu erstellen?

Danke

3voto

Dan Punkte 2017

Weil es eine Eins-zu-viele-Beziehung zwischen Person und Name gibt, würde ich es wie folgt strukturieren:

  • Stück: PieceID, PersonID, Foo, ...
  • Person: PersonID, Bar, ...
  • Namen: NameID, PersonID, Name, ...

Ihre Abfrage wäre dann einfach:

SELECT Foo, Bar, Name
FROM Namen
    JOIN Person USING(PersonID)
    JOIN Stück USING(PersonID)
WHERE Namen.Name LIKE '$query'

2voto

maple_shaft Punkte 10389

Du hörst dich so an, als wärst du auf dem richtigen Weg.

Tabellen:

  • Stück
  • Person
  • Alias
  • PersonAlias

Die Tabelle PersonAlias ist natürlich eine Zuordnungstabelle zwischen Person und Alias.

Du solltest in der Lage sein, Person einfach mit einem Alias zu verbinden, indem du Person mit PersonAlias verbindest, dann Alias mit PersonAlias, und dann nach dem Alias filterst, den du suchst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X