Frage

Angenommen, ich habe eine Tabelle mit den folgenden Spalten (eine Liste von Wörtern):

word: varchar
contributor: integer (FK)

Nehmen wir nun an, ich wollte Übersetzungen für jedes "Wort" haben. Was wäre am besten? Einen zweiten Tisch haben?

word: integer (FK)
translation: varchar
contributor: integer (FK)
lang: integer (FK)

Oder alles in derselben Tabelle?

word: varchar
translation_for: integer (FK - to the same table)
contributor: integer (FK)
lang: integer (FK)

Nehmen wir zwei Szenarien an, (1), in denen ich zusammen mit dem ursprünglichen Wort, aus dem es übersetzt wurde, (2) ein übersetztes Wort ziehen muss, wo ich ziehen muss nur das übersetzte Wort. In beiden Szenarien würde ich die "originalen" Wörter weitaus stärker verwenden (beide Auswahl und Aktualisieren/Einfügen).

Welcher Ansatz ist also am besten für jedes Szenario oder im Allgemeinen? Ich neige zum ersten Ansatz, seitdem muss meine Auswahl "Standard" nicht nach dem qualifiziert werden Lang Säule. Was denkst du?

Vielen Dank!

War es hilfreich?

Lösung

Ich denke, Sie werden später verletzt, wenn Sie später eine Sprache hinzufügen möchten, wenn Sie die Datenbank jetzt nicht normalisieren. Haben Sie eine Worttabelle, in der sich das Wort in der Standardsprache befindet. Es hat eine ID. Haben Sie eine Sprachtabelle mit einer ID (dh Spanisch, 2) und einer Übersetzungstabelle, die die Wort -ID, die Sprach -ID und schließlich das tatsächliche Wort in dieser Sprache enthält. Dies ist die verknüpfte Tabelle.

Verwenden Sie eine Ansicht für Ihre Abfragen, aber je nach DBMS benötigen Sie möglicherweise harte Abfragen.

Dies setzt nur voraus, dass Sie versuchen, Lokalisierung zu liefern, und somit später mehr Sprachen hinzufügen. Das Auf diese Weise ist es einfacher, wenn Sie Ihre Datenbank ändern, um jedes Mal Spalten hinzuzufügen, wenn Sie eine Sprache hinzufügen. Wenn Sie wirklich nur eine Übersetzung benötigen und sehr bezweifeln, dass Sie jemals eine andere brauchen, wäre es in Ordnung, nur die eine Spalte hinzuzufügen.

Andere Tipps

Da Sie anscheinend ein "Wort" wollen, eine Identität von einem "übersetzten Wort" getrennt zu haben, dann denken Sie, dass die erste Option Ihre Bedürfnisse besser erfüllt.

Normalerweise würde ich ein Design eher wie folgt:

PK (Key (varchar), Lang (FK)), Word (nvarchar)

Wäre angemessener - wo Sie nur auf Text nach dem Schlüssel- und Lang -Wert verweisen. Aber es sieht so aus, als würden Sie den Schlüssel durch das "Originalwort" ersetzen - das macht es etwas anders.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top