Frage

Lassen Sie uns sagen, dass ich eine Datenbankspalte, die immer in Großbuchstaben geschrieben werden sollte.

Hier sind ein paar Ideen:

1) Erstellen Sie eine Spalte Einschränkung von: col = UPPER(col)

2) Erstellen Sie eine vor insert / update Reihe Trigger, setzt: col = UPPER(col)

Normalerweise ist die mehr Einschränkungen für Ihre Datenbank-Daten, desto besser, und Trigger können mysteriös und schlecht sein. Es sei angenommen, dass die Entwickler das Schreiben von Code sind in der gleichen Organisation und damit der Code, den sie schreiben kann von uns geändert werden.

Welche Vorgehensweise würden Sie verwenden und warum?

Es muss groß geschrieben werden, da die Daten in Frage eigentlich immer in Großbuchstaben sind (es ursprünglich ist gedruckt auf diese Weise durch verschiedene Drittparteien). Es gibt keinen Sinn in Groß vs Klein für diesen speziellen Bereich.

War es hilfreich?

Lösung

Es hängt davon ab, warum die Säule in Großbuchstaben sein muss, aber im Allgemeinen würde ich für die Einschränkung gehen.

Ich mag keine Sachen, die meine Daten ändert sich, wenn ich es in die Datenbank einfügen. Es bedeutet, dass ich eine Diskrepanz zwischen dem, was ich geschrieben habe und was ich das nächste Mal gelesen wird.

Wenn der Text von einem Benutzer eingegeben wurde, sollten Sie eine zusätzliche Spalte hinzugefügt, die die obere Gehäuseausführung enthält. So können Sie immer den Text angezeigt werden, wie der Benutzer es eingegeben

Andere Tipps

In den meisten Fällen würde ich (1) sagen, weil, wie Sie wies darauf hin, Trigger oft schlecht sein kann / seltsam (wenn auch nicht immer). Aber wenn sie mit Schnur Groß- und Kleinschreibung zu tun, neige ich dazu, dass als Sonderfall zu behandeln, und es ist immer bei jedem Schritt auf dem Weg zu reparieren. Ich bin nicht sicher, ich habe keine konkreten Gründe dafür, es einfach „fühlt sich“ richtig. Wahrscheinlich, weil in den meisten Umgebungen I in mindestens gearbeitet haben, von einem Business-Logik Standpunkt FoO immer gleich foo immer FOO entspricht.

Auch in diesem Fall scheint es wie eine geringere Belastung auf den Entwickler zu sagen: „Zu Ihrer Information, alle Strings in Großbuchstaben auf dem Server gespeichert sind,“ als ihr Handgelenk jedes Mal zu schlagen, sie zu vergessen. Es ist nicht so, sagen: „Zu Ihrer Information, jedes Mal einen Preis in die DB einfügen, wird Umsatzsteuer hinzugefügt werden.“

Dies ist am besten als Einschränkung implementiert, vermeidet es zusätzliche Last und das tut, was Sie wollen - die Daten erzwingen, in dem Format sein, das Sie benötigen

.

Ich denke, es ist der falsche Ansatz Umwandlung in der Datenbank zu erzwingen, da die Daten, die ohne Verlust der Integrität umgewandelt werden können, sollen in der Datenbank-Ebene behandelt werden. Wenn der Fall unbedeutend ist dann als solche behandeln -. Und eine Einschränkung hilft, Fehler zu fangen

ein Groß- und Kleinschreibung Index vielleicht eine bessere Lösung Hinzufügen (siehe Database Case Insensitive Index )

oder Erhöhung Abdeckung von automatisierten Tests, und die zusätzliche Belastung auf dem Produktionsserver vermeiden.

Ich würde auch einen anderen Ansatz betrachten - eine „Table API“ bereitstellt, die es Entwicklern ermöglicht, nur auf Werte an eine gespeicherte Prozedur übergeben (oder was auch immer), die dann stellt sicher, dass die Werte auf dem Einsatz groß geschrieben werden (pro Ihr Beispiel). Ich würde auch diese sich mit einem Constraint zurück (es Abfrageoptimierung für eine Sache unterstützen kann) und direkte Änderung Rechte auf dem Tisch entfernen - wenn Sie Entwickler nicht vertrauen alle Einsätze in Großbuchstaben, dann sollten Sie ihnen nicht trauen zu verwenden Sie die TAPI entweder immer.

Wenn Sie etwas in einer Spalte Einschränkung für die Datenbank umge einen Trigger es im Allgemeinen bevorzugt tun können, ist, wie es oft schneller ist. Wenn Sie sich über die Durchsetzung obwohl die Anwendung sprechen, empfehle ich nicht. Wenn die Regel immer gelten muss, soll es nie irgendwo sein, außer in der Datenbank. Dinge, die andere als die Anwendung, die Sie Code schreiben für können Daten in einer Datenbank ändern. Die Datenintegrität ist die Verantwortung von teh Datenbank, den Code zu halten, wo es hingehört Probleme zu vermeiden.

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