13 Stimmen

DATENBANKENTWURF - Primärschlüssel für LAND, WÄHRUNG int oder varchar

  • Für meine Ländertabelle habe ich den Ländercode als Primärschlüssel verwendet "AU, US, UK, FR" usw.

  • Für meine Währungstabelle habe ich den Währungscode als Primärschlüssel verwendet "AUD, GBP, USD" usw.

Ich denke, was ich gemacht habe, ist in Ordnung, aber ein anderer Entwickler möchte, dass ich alle Primärschlüssel in Ganzzahlen ändere, weil der Ländercode, Währungscode sich möglicherweise in Zukunft ändern könnten, sagte er. Wir wissen das einfach nicht, nun in diesem Fall hat er recht, sein Weg ist der sicherste Weg.

Sollte ich die Primärschlüssel sicherheitshalber in Ganzzahlen ändern, anstatt später bereuen zu müssen? Kann ich es nicht einfach so lassen?

0voto

Teimuraz Punkte 7895

Ich würde INT-IDs als Schlüssel anstelle von ISO-Codes verwenden und Ihnen erklären, warum:

Die Organisation, für die ich gearbeitet habe, verwendet "eigene Währung" (LBP) - z.B. wenn ein Benutzer eine Transaktion durchführt, erhält er einen bestimmten Betrag LBP als Bonus. Darüber hinaus kann er diese LBPs in USD, EUR usw. umtauschen und umgekehrt, mit LBPs für Dienstleistungen bezahlen usw. Außerdem habe ich die Währung BTC (Bitcoin) nicht im ISO-Standard gefunden.

Ja, dies sind keine offiziellen Währungen, aber es ist aus Sicht des Systems und der Benutzer flexibler, sie als Währungen zu haben und nicht als zusätzliches Produkt, das der Benutzer kaufen und verkaufen kann.

Die Organisation, für die ich gearbeitet habe, verwendet keine INTS als Primärschlüssel, sie verwendet ISO-Codes als IDs (zusätzlich zu diesen zusätzlichen Währungen).

Offiziell ist LBP der ISO-Standard für das Libanesische Pfund - daher werden sie das Libanesische Pfund nicht reibungslos in das System integrieren können.

Wenn Sie Ihre Währungen anhand des Codes identifizieren und in Zukunft eine neue Währung als ISO-Standard registriert wird (sagen wir, LBE oder BTC) - dann werden diese Währungen mit "Ihren" Währungen in Konflikt geraten.

Jemand hat hier erwähnt, dass ein zusätzlicher INT-Schlüssel für Währungen einen zusätzlichen Index darstellt. Aber entschuldigen Sie, ist das ein Problem für 300 Datensätze (ungefähre Anzahl der Währungen)? Außerdem hat die Verwendung von INTs als Primärschlüssel für Währungen einen zusätzlichen Vorteil: Stellen Sie sich eine Tabelle mit 1M Transaktionen vor, die Beträge und Währungen enthält, und was ist effizienter: INTs oder CHARS?

Also würde ich mich für INTs entscheiden.

-2voto

Hamish Punkte 22042

Ja, es wäre eine gute Idee, bevor es zu spät ist, auf einen ganzzahligen Schlüssel umzusteigen.

Zum Beispiel, was passiert, wenn Großbritannien der Eurozone beitritt?

-2voto

HLGEM Punkte 91543

Es ist eine schlechte Praxis, etwas als Primärschlüssel zu verwenden, das sich ändert. Angenommen, der Wert ändert sich und Sie müssten dann alle untergeordneten Datensätze aktualisieren. Dies könnte Ihre Datenbank stunden- oder sogar tagelang sperren. Deshalb ist der Integer-Fremdschlüssel mit dem eindeutigen Index auf dem natürlichen Schlüssel eine bessere Praxis für Informationen, die volatil sind.

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