2017-05-04 4 views
1

Ich würde gerne wissen, ob es besser ist (subjektive ich weiß), eine ganze Zahl von Werten oder eine Zeichenfolge von Werten zu speichern, wenn das Feld nur eine Reihe von möglichen hat Werte. Z.B.SQL Store varchar oder int, wenn ich nur eine Reihe von Werten habe

Person Table 
1. 
Name Age Category 
Joe 25 0 
Jane 28 2 
John 22 1 

2. 
Name Age Category 
Joe 25 Student 
Jane 28 Teacher 
John 22 Staff 

Welche Methode ist empfehlenswert? Methode 1 ist wahrscheinlich schneller und besser für die Abfrage, jedoch gibt es mehr Programmierkosten beim Anzeigen von Daten.

Methode 2 ist wahrscheinlich langsamer, ausdrucksstarker und weniger Programmierkosten.

Irgendwelche Ratschläge werden nützlich sein.

Vielen Dank im Voraus

+0

Und ein grad Student kann nicht unterrichten? – jarlh

Antwort

5

Sie würden die Tabellen im Allgemeinen tun, um eine Referenztabelle diese verwenden, mit der Kategorie, und eine ganze Zahl für die Verknüpfung.

eine Referenztabelle weist mehrere Vorteile auf:

  • Die Liste möglicher Werte ist an einem Ort zur Verfügung. Dies ist zum Beispiel nützlich, um eine Liste in einer Anwendung zu erzeugen.
  • Es gibt keine Rechtschreibfehler.
  • Sie können zusätzliche Informationen wie einen Kurznamen, eine Langbezeichnung, einen Ehrentitel usw. speichern.
  • Wenn Sie mehrsprachige Unterstützung benötigen, haben Sie alle Werte an einem einzigen Ort.
  • Die gleichen Werte können über mehrere Tabellen verteilt werden.

Manchmal ist eine Referenztabelle nicht geeignet. Zum Beispiel könnten Sie nur zwei Werte haben, ON und OFF. Sie können die Werte in den meisten Datenbanken mit CHECK CONSTRAINT validieren. Das ist eine vernünftige Alternative. Aber ich vermute, dass die Kategorie mehr Informationen als nur eine Handvoll Werte enthält.

+0

Vielen Dank für Ihren Kommentar und Rat. Option 1 wird bevorzugt – Dudedolf

0

Vielleicht sind Sie auf der Suche nach einer einfachen Antwort, aber ich würde gerne teilen meine Methode, Ich habe eine Tabelle namens CustomCaptions. Hier finden Sie die Struktur der Tabelle.

CREATE TABLE [dbo].[CustomCaptions](
[Capt_ID] [int] IDENTITY(1,1) NOT NULL, 
[Capt_Code] [varchar](50) NULL, 
[Capt_Family] [varchar](50) NULL, 
[Capt_FR] [nvarchar](100) NULL, 
[Capt_EN] [nvarchar](100) NULL, 
[Capt_ES] [nvarchar](100) NULL, 
[Capt_IT] [nvarchar](100) NULL, 
[Capt_TR] [nvarchar](100) NULL, 
[Capt_CS] [nvarchar](100) NULL, 
[Capt_DE] [nvarchar](100) NULL, 
[Capt_Deleted] [bit] NULL, 
[Capt_Order] [smallint] NULL, 
CONSTRAINT [PK_CustomCaptions] PRIMARY KEY CLUSTERED 
(
[Capt_ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Die Capt_Family Spalte ist der Name Ihrer ausländischen Spalte.

In Ihrem Fall, in der CustomCaptions-Tabelle, behalte ich den Code und die Familie. Für exemple,

 Capt_Family  Capt_Code  Capt_EN ... Capt_Order 
     Category  0    Student  0 
     Category  1    Teacher  1 
     Category  2    Staff  2 

Eine solche, für alle kleinen Tabellen wie Kategorie, Status, Typ etc ... ich nur eine Tabelle zu verwenden, reduziert dies die Gesamtzahl der Tabellen in meiner db. Ich habe auch nur eine Methode, um Comboboxen oder Listboxen zu füllen, indem ich nur den Familiennamen gebe. Und auch nur einen Bildschirm, um den Inhalt einer Liste zu bearbeiten.

Und auch wie Sie in der Tabellenstruktur sehen können, können Sie einfach mehrere Sprachen in Ihrer Anwendung verwalten. Je nach Bedarf können Sie Capt_EN oder eine andere Spalte für eine andere Sprache verwenden.

Schließlich können Sie, wenn Sie möchten, Ansichten erstellen, die die Programmierkosten reduzieren.

Ich hoffe, das hilft.

+0

Es wird allgemein als schlechte Praxis angesehen, eine einzelne Nachschlagetabelle für mehrere Entitäten zu verwenden. Wenn Ihr Projekt klein genug ist, können Sie wahrscheinlich damit durchkommen, aber es kann möglicherweise Probleme verursachen. – Jerrad

+0

Hallo jerrad, danke für deinen Kommentar. Dieses System wird in einem Produkt verwendet, das mehr als 5 Millionen Benutzer hat. Möglicherweise ist dies nicht die beste Vorgehensweise, aber es gibt viele Vorteile dieses Systems. Vor allem, wenn Sie die Entwicklungskosten wie Dudedolf ​​reduzieren möchten. –

+0

Sie denken vielleicht, dass Sie die Entwicklungskosten zunächst reduzieren, aber denken Sie an die Zukunft. Was, wenn Sie ein zusätzliches Feld zu einer Beschriftungsfamilie hinzufügen möchten? Zum Beispiel gibt es vielleicht ein Präfix, das zum Generieren von Ausweisnummern verwendet wird (Schüler-ID-Nummern beginnen mit 11, Lehrer mit 22 und Mitarbeiter mit 33). Sie müssten eine Art Präfixspalte hinzufügen, die nur für CaptureFamily-Typen der Kategorie "Category" gilt und von allen anderen nicht verwendet wird. Wie haben Sie eine Fremdschlüsseleinschränkung gegen einen Ihrer Codes? – Jerrad

Verwandte Themen