Was ist der beste Weg, um einen Titel in einer Datenbank zu speichern, um das Sortieren ohne das führende "The", "A" zu erlauben

8

Ich betreibe eine Website, die sich mit Theater beschäftigt (und wenn Sie sich dafür interessieren).)

Wenn ich eine Liste von Spielen aus der Datenbank abfrage, möchte ich "The Merchant of Venice" unter den "M" s sortieren. Natürlich, wenn ich den Namen des Spiels anzeige, brauche ich das "The" davor.

Was ist der beste Weg, um die Datenbank so zu gestalten?

(Ich benutze MS-SQL 2000)

    
James Curran 10.11.2008, 18:43
quelle

5 Antworten

17

Sie befinden sich auf der richtigen Spur mit zwei Spalten, aber ich würde vorschlagen, den gesamten anzeigbaren Titel in einer Spalte zu speichern, anstatt Spalten zu verketten. Die andere Spalte wird nur zum Sortieren verwendet. Dies gibt Ihnen völlige Flexibilität bei der Sortierung und Anzeige, anstatt nur mit einem einfachen Präfix zu arbeiten.

Dies ist ein ziemlich üblicher Ansatz beim Suchen (der mit dem Sortieren zusammenhängt). Eine Spalte (mit einem Index) ist fallgefaltet, ohne Punktierung usw. In Ihrem Fall würden Sie auch die grammatikalische Konvention anwenden, führende Artikel auf die Werte in diesem Feld zu entfernen. Diese Spalte wird dann als Vergleichsschlüssel zum Suchen oder Sortieren verwendet. Die andere Spalte ist nicht indiziert und behält den ursprünglichen Schlüssel für die Anzeige bei.

    
erickson 10.11.2008, 19:12
quelle
1

Speichern Sie den Titel in zwei Feldern: TITLE-PREFIX und TITLE-TEXT (oder etwas Ähnliches). Sortieren Sie dann nach der zweiten, aber zeigen Sie die Verkettung der beiden mit einem Abstand dazwischen an.

    
dkretz 10.11.2008 18:47
quelle
1

Meine eigene Lösung für das Problem bestand darin, drei Spalten in der Datenbank zu erstellen.

%Vor%

"article" wird nur entweder "The", "A" "An" (beachten Sie die nachgestellten Leerstellen) oder eine leere Zeichenfolge (nicht null)

"sorttitle" ist der Titel mit dem führenden Artikel entfernt.

So kann ich nach SORTTITLE sortieren und TITLE anzeigen. Das berechnete Feld wird nur wenig bearbeitet (es ist also schnell), und es gibt nur wenig Arbeit beim Einfügen.

    
James Curran 10.11.2008 18:47
quelle
0

Ich stimme doofledorfer zu, aber ich würde empfehlen, Leerzeichen zu speichern, die als Teil des Präfixes eingegeben wurden, anstatt anzunehmen, dass es sich um ein einzelnes Leerzeichen handelt. Es gibt Ihren Benutzern mehr Flexibilität. Möglicherweise können Sie in Ihrer Abfrage auch eine Verkettung durchführen, sodass Sie die Felder nicht als Teil Ihrer Geschäftslogik zusammenführen müssen.

    
Benson 10.11.2008 18:49
quelle
0

Ich weiß nicht, ob dies in SQL Server getan werden kann. Wenn Sie funktionsbasierte Indizes erstellen können, können Sie eine erstellen, die eine Regex für das Feld ausführt oder eine eigene Funktion verwendet. Dies würde weniger Speicherplatz beanspruchen als ein zusätzliches Feld, würde von der Datenbank selbst auf dem neuesten Stand gehalten werden und ermöglicht es, den vollständigen Titel zusammen zu speichern.

    
Leigh Riffel 10.11.2008 22:41
quelle